2009년 1월 20일 화요일

FastCgi 에서 PHP 폴더의 실행 권한

FastCgi 에서, PHP 는 매우 가볍고 빠르게 동작 합니다.
물론 세팅 방법도 기존과 다르게 보다 쉽습니다.

FastCgi 에서 PHP 는,. IIS 6에서는 작업자 프로세스에 의해서 실행이 됩니다. 그래서 PHP 가 설치되어 있는 폴더(php-cgi.exe 가 위치하는 폴더) 에는 Network Service 계정 접근이 가능 해야 합니다.

보통 읽기(Read) 권한만 설정되어 있어도 PHP 스크립트는 매우 잘 작동 합니다. 그러나, PHP 코딩 방식중에 Include 등의 함수 호출에서 코드 방식에 따라서 오류(FastCgi 에서 Http 500)가 발생 합니다.

include 또는 require_once 에서 상대 경로를 호출할 경우인데요. 요즘 대부분의 include 에서 페이지 호출 방식은 상대경로(relative path)를 이용하고 있습니다.

물론,. $_SERVER["DOCUMENT_ROOT"] 처럼 절대 경로를 반환해 주는 환경 변수를 이용해서 include 하는 경우에는 문제가 없으나, "../" 와 같은 상대 경로를 이용할때에는 오류가 발생 합니다.

[error] PHP Warning:
failed to open stream:
No such file or directory in
/main.php on line 15

이러한 오류는, PHP Cgi 에서 실행(Read & Execute) 권한(permission)이 없기 때문 입니다.

개체 이름: D:\php5\php-cgi.exe
이미지 파일 이름: C:\WINDOWS\system32\inetsrv\w3wp.exe
기본 사용자 이름: NETWORK SERVICE
액세스: SYNCHRONIZE
  ReadData (또는 ListDirectory)
  실행/트래버스
  ReadAttributes



위와 같이 작업자 프로세스 실행 계정에, 실행권한을 설정을 해줄 경우 기존 Linux 에서 작동하는 PHP 스크립트 대부분은 문제 없이 잘 작동 합니다.

물론, 세션 저장 폴더나 로깅 폴더등에는 추가적으로 쓰기/삭제 권한까지 필요 합니다.


19-php-fastcgi-ntfs-network-service.gif

댓글 없음:

댓글 쓰기

HttpClient 에서 비동기 호출시 System.Threading.Tasks.Task 오류

client.PostAsync().Result; 하나 이상의 오류가 발생했습니다., 위치: System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) 이 요청을...