Nginx가 시작 안될떄


안녕하세요. 고코더 입니다.

오랜만에 nginx 를 켜보니
실행이 되지 않고 있습니다. log를 확인해보니

[emerg] 12880#17648: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)



이런 메세지가 뜨네요,

경험 많은 개발자는 벌써 "아 이거~"라고 생각하시겟지만
처음 격는 분은 구글 번역부터 돌려볼 상황 입니다.

해당 오류는 nginx에서 지정한 포트를 다른 서비스에서 사용중일때 나타는 메세지 입니다.


▼우선 커맨드창(CMD)을 열어서 
포트를 확인하는 명령어를 입력 해보겠습니다.
netstat -a
- 사용중인 포트를 확인 시켜주는 명령어

▼ 역시 80포트가 리스닝 중이네요


이런 얼마전에 설치한 오토셋(autoset) 프로그램이 80포트를 자동 실행 중이었네요

▼ 오토셋을 중지하고 


▼중지 이후에 Nginx를 실행 했습니다.
역시 잘되네요


많은 프로그램을 실행하고 설치하다 보니 포트가 충돌하는 오류는 개발자라면 누구나 한번 쯤 격어 보는 상황 입니다.

웹에서 쓰는 포트는 다양하지 않아서 더 자주 충돌합니다.
기본 실행을 중지 해놓고 필요할 때마다 시작하면 
좀 더 편하게 사용하실 거라 생각 됩니다.


마무리

오류가 생기면 Log를 복사해서
구글에 물어보세요


댓글을 달아 주세요



정의되지 않은 상수 오류


안녕하세요. 고코더 입니다.

PHP는 자유로운 언어입니다. 
그런데 5.3 이하일땐 더 프리 했습니다.



그래서 왠만한 유효성은 오류 없이 넘기고는 했죠.
변수도 바로 꺼내써도 되고 일반 언어에서는 통제 할 만한 규칙은 무시 가능했습니다.
그런데 5.4에 들어오면서 조금씩 규격을 통제하기 시작했습니다.

그중에 대표적인게 배열속에 상수 값을 따옴표로 지정하지 않으면 
이런 Notice 오류가 나게 되었습니다.


Notice : Use of undefined constant [변수명] - 소스위치


물런 Notice 오류라 무시해도 되지만
그래도 수정하시는게 좋습니다. (당연히)

▼아래 코드를 PHP 상에서 확인해보겠습니다.
1
2
3
4
5
6
7
<?php
$data['name'= "gocoder";
$data['age'= "15?";
 
echo "name : ".$data["name"]."<Br>";
echo "age : "$data[age];
?>
cs
▼name은 오류가 없는데 age를 15살로 해서 그런지, 따옴표을 없이 써서 그런지
"Use of undefined constant" 오류가 났습니다.



이제 배열을 지칭할때는 이제 따옴표를 감싸서 
사용하시길 바랍니다. 
예전에 개발된 소스는 대부분 감싸 있지 않더군요



마무리

서버사이드 언어중 가장 오래 지속 발전 가능한 언어는 PHP가 아닐까요?


댓글을 달아 주세요



에러 메세지 표시하기 


안녕하세요. 고코더 입니다.

오늘은 기초적인 PHP의 오류 메세지를 화면에 출력할 수 있는 방법을 배워보겠습니다.
여러가지 언어를 하다보니 헷갈려서 제가 참고 하려 씁니다.



php는 다양하고 우수한 옵션이 많습니다.
다른 언어 같은 경우는 was나 서버의 설정으로 오류 메세지를 확인합니다. 

php에서도 서버 설정을 통해 확인 가능하지만
더욱 간단히 소스 삽입으로 오류 메세지를 웹 프론트에 출력이 가능합니다.

▼ 아래 소스를 웹에서 확인해보세요
1
2
3
4
5
6
7
8
9
<?php
 
ini_set('display_errors'1); 
ini_set('error_reporting', E_ALL);
 
echo "error "
echo "error 2"
 
?>

cs

▼ 네 당연히 오류가 표시 됩니다. 아래처럼 일부로 세미콜론(;)을 붙이지 않았습니다.


▼해당 코드는 오류를 화면에 보이겠냐는 옵션입니다.
1이면 화면에 출력합니다. 1이 아니면 의미가 없습니다.
1
<? ini_set('display_errors'1); ?>
cs

▼ 해당 옵션은 에러를 보여주는 수준입니다. 보통은
E_ALL로 모든 에러를 봅니다. 
1
<? ini_set('error_reporting', E_ALL); ?>
cs

▼ 나머지 옵션은  해당 URL에서 확인 할 수 있습니다.
필요에 따라 사용 하시길 바랍니다. (다른 옵션을 사용해본적이 없네요)





마무리


오류 좀 그만 ..


댓글을 달아 주세요


오토셋 으로 PHP 학습 환경 구축하기 


안녕하세요. 고코더입니다. 

제 강의에서 다양한 APM 설치 프로그램을 다루었습니다.

개발 공부를 하던중 요즘 많이 사용하는 APM을 또 하나 알아냈습니다.
오토셋이라는 프로그램입니다. 



이런 컴퓨터의 몇개의 서버가 있는 지 모르겟네요.

그래도 필요한것은 다양하니 이번엔 오토셋을 다뤄 보겠습니다. 
회사,개인 어디든 무료로 사용할 수 있는 프리웨어 입니다.

▼ 홈페이지 입니다. 

▼ php 7 부터 5.2 까지 버전을 제공합니다.
저는 5.6버전을 설치하려고 합니다.


▼한국산 이라 한글로 설치를 안내합니다.


▼다음을 누르고


▼다음을 누르고


▼설치 위치를 정하고 다음



▼Full installation 으로 설치해주세요


▼설치를 눌러주세요


▼ 설치가 완료되었습니다. 실행해보겠습니다.


▼ localhost를 접속해봅니다.
가장 친절한 첫페이지입니다. 왼쪽맨위에 PHPinfo()
를 눌러주세요


▼ 5.6 버전이 설치되었습니다. 
갖가지 버전의 APM들이 가득하네요 



기능 리뷰는 사용 후에 남기겠습니다.
설치 후 느낌은 지금 까지 나온 프로그램의 장점만 모아둔 기분이네요


마무리

좋은 한국산 APM


댓글을 달아 주세요



Thread Safety , NON Thread Safety 확인방법


안녕하세요 고코더 입니다.

요즘은 질문을 받는걸 블로그 글로 쓰는 경우가 많습니다.
후배가 현재 서버의 "TS", "NTS"를 어떻게 알 수 있냐고 묻길래
너무나 간단한 답변이라 말을 해주었습니다.

인터넷에 치면 간단하게 나올텐데라고 생각이 들어 직접 찾아보니
이론 설명만 있고 서버의 Thread  방식을 알아내는 설명 글이 없네요.

정보의 바다지만 빈틈도 많은 오션이군요.
작은 빈틈부분은 고코더도 메꿔봐야겠네요

▼ 우선 현재 확인하고 싶은 서버에서 아래처럼 코드를 입력합니다.
현재 서버의 설정을 확인할 수 있는 방법입니다.
1
2
3
<?php
    phpinfo();
?>
cs



▼ info 화면에서 "Thread Safety"를 검색해보세요 



▼ disabled 는 NTS(NON Thread Safety)


▼ enabled 는 TS(Thread Safety)


이렇게 구별 할 수 있습니다.



TS, NTS 차이

NTS는 
     - 단일 스레드
     - FAST CGI 호환을 위해
TS는
     - 다중 스레드
     - SAPI와 PHP 호환을 위해

뭐 결론은 IIS CGI 때문에 NTS가 나온 것뿐이죠.

▼ 참고 URL




마무리

▼ 선택의 기로에서
어떤걸 다운해야 할지 이제 느낌이 오시죠?



댓글을 달아 주세요



PHP에 카우치베이스 확장모듈 등록하기 


안녕하세요. 고코더 입니다.


noSQL인 카우치 베이스를 PHP에서 DLL로 확장을 하는 방법을 알아보려고 합니다.
한국에서는 확실히 mongoDB 말고는 레퍼런스가 많이 없습니다.
사용도가 낮아서 그런거겠죠.

그래도 학습을 위해 혹은 로컬 셋팅을 위해 윈도우 서버에서
카우치 베이스를 확장 하는 방법을 배워 보겠습니다. 

▼해당 URL로 이동하여 원하는 버전의 couchbase DLL를 다운로드 합니다.



▼압축파일 루트에는 두개의 DLL 파일이 있습니다.


1. libcouchbase.dll 
해당 파일을 아래 폴더로 복사를 해주세요
관리자 계정으로 복사만 해주시면 됩니다. 
C:\Windows\SysWOW64
C:\Windows\System32


2. php_couchbase.dll
자신의 PHP설치 폴더로 이동하셔아 합니다. 셋팅에 따라 폴더는 다 다릅니다.
본인의 PHP 폴더 위치를 찾아서 ext 확장 모듈 폴더에 복사해주세요
- APMSETUP7일 경우
C:\APM_Setup\Server\PHP5\ext

- XAMPP일 경우
C:\xampp\php\ext

- AutoSet일 경우
C:\AutoSet9\server\bin\ext

- PHP를 따로 설치했을 경우
C:\PHP\ext

3.PHP.ini 수정
이번에는 PHP.ini 를 수정해야 합니다.
2번에서 말씀드린 폴더 위치 기준으로 찾아보시면 있습니다.
(가장 좋은 방법은 폴더 안에서  php.ini 검색을 해보세요 

그리고 아래처럼 파일에 코드를 삽입 해주세요
extension=php_couchbase.dll
; select default serializer
couchbase.serializer = json 

▼제 PHP.ini 캡쳐 화면입니다.
couchbase.serializer 를 json 형태로 사용하시려면 주석 없이 입력해주세요


▼그리고 phpinfo()를 실행시켜 카우치베이스가 추가되었는지 확인하시면 됩니다.



간단하지만 설정할때 정보가 많이 없어서 고생했네요


마무리

여러분은 헤매지 마시길





댓글을 달아 주세요



APM셋업 5.2.x -> 5.3.x 업그레이드


안녕하세요. 고코더입니다.



APMSETUP7 설치는 아래 강의를 선행 해주세요.


이전 APMSETUP7 설치 강의 후에 이런 질문이 들어왔습니다.

Q. 5.3 버전 프로그램은 없나요?
A. "네 없습니다."

지난번 강의처럼 APMSETUP은 이제 새로운 버전이 없습니다.
몇몇 능력자 분들이 버전 업을 해서 배포 하고 있지만
조금은 불안해 보입니다.

기업에서 운영중인 PHP 버전은 5.3버전이 가장 많은거 같습니다.
요즘은 성능때메 7로 많이 옮기고 계셔서 또 모르겠네요

대중화 된 버전인데 하필 5.2까지 빌드업이 되어 있어서 난감하신 분들이 있을거 같습니다.

그래서 오늘은 5.3으로 업그레이드 하는 방법을 알아보겠습니다.

▼해당 페이지에 접속하셔서


php-5.3.19-Win32-VC9-x86.zip 을 검색하여 다운 받으시기 바랍니다.

▼ 그리고 APM_SETUP 폴더에 Server 폴더에 PHP5로 이동합니다. 
C:\APM_Setup\Server\PHP5



▼ 기존의 PHP5폴더는 삭제 아니면 폴더명을 PHP5_backup 같은 형식으로 백업해주세요.


▼ 그리고 새로운 폴더로 PHP5 폴더안에


▼위에서 다운로드 한 프로그램을 압축 해제 후 
복사 붙혀넣습니다. 완성 된 PHP5 폴더 모습입니다. 5.3.19 버전 파일로 채워져 있습니다.


▼그리고 phpinfo()를 실행시킨 결과
APMSETUP도 이제 5.3 사용이 가능하게 되었습니다.





마무리

APMSETUP 아직도 많이 사용 하시네요.


댓글을 달아 주세요



문자열 replace 변경 하기 


안녕하세요 고코더 입니다.


오늘은 PHP의 기본 함수은 str_replace를 알려드리려고 합니다.
모든 언어에는 replace 함수가 있습니다. 당연히 PHP에도 있습니다.

단지 함수 이름 앞에 "str_" 을 붙혀넣었습니다. 문자열(str) 변경한다는 용도를 강조한 듯합니다.
PHP에는 "replace" 라는 6글자의 함수는 없고 용도를 표시한 [*]_replace가 있습니다.
개발자를 위한 배려지만 조금은 헷갈리는 구조입니다.



그래도 완벽함 치환 함수를 제공해주고 있으니 한번 알아보겠습니다.

▼해당 함수의 사용법입니다.
str_replace(
     1번째 인수 : 변경대상 문자
     2번째 인수 : 변경하려는 문자
     3번째 인수 : 변수, replace가 바꾸고자 하는 문자열(변수수)
)

이런식으로 되어 있습니다.
ASP의 replace 랑은 1,3번째 인수가 바뀌어 있네요.
언어 마다 사용법과 명명은 같은데 사용법이 조금씩 다르네요

▼ 그리고 쉽게 예제를 한번 만들어 보았습니다.
1
2
3
4
5
6
7
8
<?php
 
    $txt = "고코더 개발 Express 개발강의";   //대상 문자열
    $result = str_replace('개발' , 'IT'$txt);
    // str_replace('바껴서 없어질 문자' , '변경 완료 될 문자', '대상 문자열');
    echo "변경 전 문자열 : ".$txt."<br>";
    echo "변경 후 문자열 : ".$result;
?>
cs

최대한 한눈에 들어오게 코딩을 해보았는데요
개발 이란 글자를 -> IT라고 바꾸는 방법을 알아보았습니다.
(처음 블로그 이름이었다고 요즘은 범위가 넓어져 개발이름 이름 대신 IT를 쓰고 있습니다.)

▼웹에서 확인한 결과입니다.
IT Express !!!




마무리

 replace 만 이라도 사용법을 모든 개발언어가 통일 했으면 하네요.


댓글을 달아 주세요



php변수를 지정 했는지 체크

PHP의 특징은 변수를 선언하지 않고도 바로 쓸  수 있습니다.
그래서 개발을 하다보면 어떤 참조 파일에
새롭게 정의한 페이지 변수와 중복되는건 아닌지 혼란스럽습니다.

그래서 PHP는 isset()이라는 함수를 만들어 놓았습니다.

해당 변수가 설정이 되어 있는지 아닌지를 체크 할 수 있는 기능입니다.

생각보다 간단한 방법으로 변수의 혼란을 피할 수 있는데 실무에서
잘 안사용 하는거 같아 정의 해보았습니다.




▼PHP 공식 메뉴얼은 아래와 같습니다.

▼제가 express 하게 예제를 만들어 보았습니다. 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 
    $var1 = "";  //변수를 설정
    //$var2 = "" //변수를 설정하지 않음
 
    $arr_var = array ("1",2NULL);
 
    echo "변수를 설정 한 경우 :".isset($var1)."<br>";
    echo "변수를 설정 하지 않은 경우 :".isset($var2)."<br>";
 
    //if에서 사용할 시에 
    if (isset($var1)){
        echo "변수를 설정했다면 in <br>";
    };
 
    echo "배열에 변수를 설정 한 경우 :".isset($arr_var[0])."<br>";
    echo "배열에 변수를 Null 한 경우 :".isset($arr_var[2])."<br>";
 
?>

▼웹 에서 노출된 모습입니다.


주의 할 점은  이렇습니다.
1. 변수가 사용된 즉 값이 담겨 있을시에는 "1"을 노출합니다.
2. 값을 null로 지정한 변수는 설정하지 않는 경우와 같이 취급합니다.
3. 배열에서도 사용 가능하며 배열로 프로그램을 만들시에 상당히 도움이 됩니다. 





마무리


함수 하나 하나 깊이 공부하면 가장 좋겠지만
특징만 외워두고 필요할때 꺼내 쓰세요


댓글을 달아 주세요



PHP에서 요일 구하기

요일 구하기는 한번씩은 만들어 봤을 기능입니다.
대부분의 언어는 함수로 이 기능을 제공합니다.

▼참고 레퍼런스는 아래 URL입니다.

하지만 간단하게 예제로 참조 해보겠습니다.

date("w") - 0부터 시작해서 6까지 일~토 까지 나타냅니다.
date("N") - 1부터 시작해서 7까지 월~일 까지 나타냅니다.



PHP 5.1에서는 date("N")으로 ISO-8601 표준으로 제공해주네요.
DB 설계에 따라 둘중 하나를 골라 쓰시면 될 것으로 보입니다.

▼ 아래는 코딩한 레퍼런스입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    /*
        date("w")은 0(일요일)에서 6(토요일)
        date("N")은 1(월요일)에서 7(일요일)
    */
 
    $week_w = array('일','월','화','수','목','금','토');
    $week_N = array('','월','화','수','목','금','토','일');
 
    echo "date(\"w\") : ".$week_w[date("w")]."<Br>";
    echo "date(\"N\") : ".$week_N[date("N")]."<Br>";
 
?>
cs

▼ 배열 순서에 요일을 넣고 한글 요일명을 구했습니다.


▼w는 소문자고 N은 대문자로 한건 오타가 아니라
PHP 메뉴얼 사이트에 그렇게 쓰고 있어서 그대로 기술했습니다.
대소문자에 따라 기능이 달라집니다.



▼소문자 n은 월 숫자 표현이이고 w 대문자는 주차이기 때문에 
대소문자를 유의하여 쓰셔야 합니다.





마무리

시간 요일이 잘못나온다면 해당 블로그를 참조해주세요


댓글을 달아 주세요