PHP는 접착제입니다. 수많은 써드파티 라이브러리를 합쳐서 직관적으로
일관성 있게 하고, 배우기 쉬운 언어 인터페이스로 붙여서 좋은 웹
어플리케이션을 만드는 접착제입니다. PHP의 유연성과 힘은 놓여지는
플랫폼의 안정성과 강력함에 의존합니다. 작동하는 OS, 작동하는 웹 서버,
붙일 수 있는 작동하는 써드파티 라이브러리가 필요합니다. 이들 중 하나라도
작동을 멈췄을 때, PHP는 문제를 발견하고 빠르게 고칠 수 있는 방법이
필요합니다. 놓여지는 프레임워크에 완전히 분리된 실행 쓰레드, 완전히
분리된 메모리 세그먼트, 각 요청이 실행되는 강한 그릇을 갖추지 못한다면,
PHP 시스템에 예상할 수 없는 약점을 가져옵니다.
쓰레드 MPM을 사용해야 한다면, PHP가 자신의 메모리 공간을 가지고 실행되는
FastCGI 설정을 살펴보십시오.
마지막으로, 쓰레드 MPM을 사용하는 것에 대한 이 경고는 윈도우 시스템에는
강요되지 않습니다. 플랫폼에 쓰이는 대부분의 라이브러리가 쓰레드 안전하게
짜여져 있기 때문입니다.
유닉스/윈도우: php.ini 파일을 어디에 놓아야 합니까?
기본값으로, 유닉스에서는 <install-path>/lib인
/usr/local/lib에 위치해야 합니다. 많은 사람들이
컴파일 시에 --with-config-file-path
플래그로 이를 변경합니다. 예를 들면, 다음과 같이 설정할 수 있습니다:
--with-config-file-path=/etc
이렇게 하면, 배포판의 php.ini-dist를
/etc/php.ini에 복사하여 수정함으로써 원하는 변경을
적용할 수 있습니다.
--with-config-file-scan-dir=PATH
윈도우에서 php.ini 파일의 기본 경로는 윈도우 디렉토리입니다. 아파치
웹서버를 사용한다면, 우선 아파치 설치 디렉토리에서 php.ini를
검색합니다. 즉, c:\program files\apache
group\apache 입니다. 이 방법으로 같은 머신에서 작동하는
다른 버전의 아파치에서 각각의 php.ini 파일을 사용할 수 있습니다.
유닉스: PHP를 설치하였지만, 문서를 읽을 때 마다 'Document Contains No
Data'를 얻습니다! 대체 뭡니까?
아마도 PHP에 문제가 있어서 코어 덤프가 일어남을 의미합니다. 이런 경우엔
서버 오류 기록을 살펴보고, 작은 테스트 방식을 사용해서 문제가 재발하는지
확인해보십시오. 'gdb'를 사용할 줄 안다면, 오류 보고에 역추적을
제공해주십시오. 개발자가 문제를 파악하기 쉽습니다. PHP를 아파치 모듈로
사용한다면 다음과 같이 해보십시오:
웹 브라우저에서 '소스 보기'를 하면 PHP 스크립트의 소스 코드가
나올겁니다. 이는 웹 서버가 스크립트를 PHP에 해석하도록 보내지 않았음을
의미합니다. 서버 설정이 무언가 잘못되었습니다 - PHP 설치 지시에 따라서
서버 설정을 다시 확인해보십시오.
유닉스/윈도우: PHP를 설치하였지만, 브라우저에서 PHP 스크립트 파일에
접근하면 서버 500 오류가 나옵니다.
서버가 PHP를 실행하려 할 때 무언가 잘못되었습니다. 확인할 수 있는 오류
메세지를 얻으려면, 명령줄에서 PHP 실행(윈도우에서는
php.exe이 있는 디렉토리로 변경하고 php
-i를 실행하십시오. PHP 실행에 문제가 있으면, 적절한 오류
메세지가 나올 것이고, 이로써 해결을 위한 실마리를 얻을 수 있습니다. HTML
코드로 스크린이 채워진다면(phpinfo()의 출력) PHP는
작동하고, 문제는 서버 설정일 것입니다. 다시 확인해보십시오.
몇몇 OS: 오류 없이 PHP를 설치했지만, 아파치를 시작하려 할 때 정의되지
않은 심볼 오류가 나옵니다:
정확히 말하면, PHP는 아무 문제가 없지만 MySQL 클라이언트 라이브러리에
문제가 있습니다. 몇몇 경우 --with-zlib
이 필요합니다. MySQL FAQ에서도
다루고 있습니다.
윈도우: PHP를 설치하였지만, 브라우저에서 PHP 스크립트 파일에 접근할 때,
오류가 발생합니다:
cgi error:
The specified CGI application misbehaved by not
returning a complete set of HTTP headers.
The headers it did return are:
이 오류 메세지는 PHP가 무언가를 출력하는데 실패했음을 의미합니다. 확인할
수 있는 오류 메세지를 얻으려면, 명령줄에서 PHP 실행(윈도우에서는
php.exe)이 있는 디렉토리로 변경하여 php
-i를 실행하십시오. PHP 실행에 문제가 있으면, 적합한 오류
메세지가 나오므로, 이를 해결의 실마리가 됩니다. HTML 코드로 화면이 가득
찬다면(phpinfo() 함수의 출력) PHP는 작동합니다.
PHP가 명령줄에서 작동한다면, 다시 브라우저에서 스크립트에
접근해보십시오. 여전히 실패한다면 다음 중 하나입니다:
PHP 스크립트, php.exe,
php4ts.dll, php.ini, 적재하려는 PHP 확장의 파일
접근 권한 문제입니다. 익명 인터넷 사용자
ISUR_<machinename>이 이들에 접근할 수
없습니다.
스크립트 파일이 존재하지 않습니다. (혹은, 웹 루트 디렉토리에서 상대
경로가 생각한 것과 다릅니다) IIS에서는 Internet Services Manager에서
'check file exists' 박스를 켬으로써 이 오류를 추적할 수 있습니다.
스크립트 파일이 존재하지 않는다면 서버가 404 오류를 내보냅니다. 이는
IIS가 스크립트 파일의 NTLanMan 권한에 기반한 인증을 수행하는 추가적인
장점이 있습니다.
윈도우: 모든 지시를 따랐는데, PHP와 IIS가 여전히 작동하지 않아요!
PHP 스크립트를 실행해야 하는 사람이 php.exe를
실행할 권한이 있는지 확인하십시오! IIS는 IIS가 설치되었을 때 추가된 익명
사용자를 사용합니다. 이 사용자가 php.exe에 권한이
있어야 합니다. 또한, 모든 인증된 사용자도 php.exe를
실행할 권한이 있어야 합니다. 그리고 IIS4에서는 PHP가 스크립트 엔진임을
알려야 합니다. 이
faq도 읽어보십시오.
IIS, PWS, OmniHTTPD, Xitami에서 PHP를 CGI로 실행할 때, 다음 오류가
나옵니다: Security Alert! PHP CGI
cannot be accessed directly..
cgi.force_redirect
지시어를 0으로 설정해야 합니다. 기본값이
1이므로 지시어를 (;으로)
주석처리하면 안됩니다. 다른 지시어와 마찬가지로, php.ini에서
설정합니다.
기본값이 1이기 떄문에, 정확한 php.ini를 읽고 있는지
100% 확인하는게 중요합니다. 자세한 내용은 이 faq를 읽어보십시오.
내 php.ini가 발견되고 읽어지는지 어떻게 압니까? 내 변경점이 적용되지
않는 것 같습니다.
어떤 php.ini를 PHP에서 읽는지 확인하려면,
phpinfo()를 호출하십시오. 윗 부분에,
Configuration File (php.ini) 목록이 존재합니다. 이는
PHP가 어디에서 php.ini를 찾고 읽었는지 여부를 알려줍니다. 디렉토리
PATH만 존재한다면, 읽어지지 않은 것이므로, php.ini를 그 디렉토리에
넣으십시오. php.ini가 PATH에 포함되어 있다면, 읽혀지는 것입니다.
php.ini가 읽혀지고 PHP를 모듈로 사용한다면, php.ini를 변경한 후에 웹
서버를 재시작하십시오.
제어판에 가서 시스템 아이콘을 엽니다. (시작 -> 설정 -> 제어판
-> 시스템, 윈도우 XP/2003에서는 시작 -> 제어판 -> 시스템)
고급 탭으로 갑니다
'환경 변수' 버튼을 클릭
'시스템 변수' 부분을 봅니다
Path 엔트리를 찾습니다 (스크롤해야 할 수 있습니다)
Path 엔트리를 더블 클릭
끝 부분에 ';'를 앞에 덧붙여서 PHP 디렉토리를 넣습니다 (즉,
;C:\php)
확인을 누르고 컴퓨터를 재시작합니다
윈도우 98/Me에서는 autoexec.bat 파일을 수정해야
합니다:
메모장을 엽니다 (시작 -> 실행, notepad를 칩니다)
C:\autoexec.bat 파일을 엽니다.
PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... 줄에 위치하여 추가:
줄 마지막에 ;C:\php
파일을 저장하고 컴퓨터를 재시작합니다
Note:
위 단계가 완료된 후에 PATH 변경이 적용되도록
재부팅하십시오.
PHP 매뉴얼이 파일을 윈도우 시스템 디렉토리에 넣도록 하는 경우가 있는데,
이 디렉토리(C:\Windows,
C:\WINNT 등)가 기본적으로 시스템 PATH에 있기
때문입니다. 윈도우 시스템 디렉토리로 파일을 복사하는건 배제된지
오래되었고, 문제가 발생할 수 있습니다.
윈도우에서 어떻게 php.ini 파일을 사용하게 합니까?
여러 방법이 있습니다. 아파치를 사용한다면, 적합한 설치 지시를
읽어보십시오. (아파치 1,
아파치 2) 그 외의
경우에는 PHPRC 환경 변수를 설정해야 합니다:
윈도우 NT, 2000, XP, 2003에서:
제어판에 가서 시스템 아이콘을 엽니다. (시작 -> 설정 -> 제어판
-> 시스템, 윈도우 XP/2003에서는 시작 -> 제어판 -> 시스템)
고급 탭으로 갑니다
'환경 변수' 버튼을 클릭
'시스템 변수' 부분을 봅니다
'새로 만들기'를 클릭하고 변수 이름에 'PHPRC', 변수 값에 php.ini가
위치한 디렉토리를 넣습니다. (예. C:\php)
확인을 누르고 컴퓨터를 재시작합니다
윈도우 98/Me에서는 autoexec.bat 파일을 수정해야
합니다:
메모장을 엽니다 (시작 -> 실행, notepad를 칩니다)
C:\autoexec.bat 파일을 엽니다.
파일 마지막에 새 줄을 추가합니다: set PHPRC=C:\php
(C:\php를 php.ini가 위치한 디렉토리로
치환합니다) 경로에 공백을 포함할 수 없는 점에 주의하십시오. 예를
들어, PHP를 C:\Program Files\PHP에 설치하였다면,
C:\PROGRA~1\PHP를 넣어야 합니다.
파일을 저장하고 컴퓨터를 재시작합니다.
PHP와 아파치 내용 협상(MultiViews 옵션)을 사용할 수 있습니까?
PHP 파일로 연결이 확장자를 포함하면, 완벽하게 작동합니다. 이 FAQ는 PHP
파일이 확장자를 포함하지 않는 경우와, 확장자 없는 URL에서 내용 협상으로
PHP 파일을 고르는 방법만 다룹니다.
이 경우, AddType application/x-httpd-php .php 줄을
교체합니다: