2009-04-28 3 views
0

내가 Apache 웹 서버에 PHP를 추가 한 일반적으로 알려진 방법은 다음과 같이 구성하는 것입니다 생각 : 구성 아파치가 바로 CGI PHP 같은 파이썬을 사용하려면

ScriptAlias /php5.3 /usr/local/php5.3/bin 
Action application/php5.3 /php5.3/php-cgi 
AddType application/php5.3 .php 

가 지금은 파이썬 유사한 구성을 작성했습니다 :

print "Content-Type: text/html\n\n" 
print "Test" 

하지만 뭔가가 보인다 :

ScriptAlias /python /usr/bin 
Action application/python /python/python 
AddType application/python .py 

나는 다음과 같습니다 작은 테스트 스크립트를 가지고

Premature end of script headers: python 

그래서 내 첫 번째는하지만 내 파이썬 응답 잘 아니라고했다 : 아파치 오류 로그에 다음 말한다 이후의 잘못이 될 수 있습니다. 그러나 Content-Type과 두 개의 줄 바꿈이 있습니다. 또한 php-cgi이라는 비슷한 PHP 스크립트의 출력 결과는 똑같은 결과를 제공합니다.

또한이 방법으로 파이썬을 얻는 방법을 보여주는 자습서를 찾지 못했습니다. 어쩌면 가능하지 않을 수도 있습니다. 그렇다면 이것이 왜 그런지 궁금합니다. 또는 나는 무엇인가 놓치고 있냐?

+0

명확히하기 : 나는 대안과 파이썬을 올바르게 설정하는 방법을 알고 있습니다. 이 구성이 작동하지 않는 이유가 궁금합니다 ... – okoman

답변

5

"어쩌면 가능하지 않을 수도 있지만, 그렇다면 이것이 왜 그런지 궁금합니다."

수정. 그것은 불가능합니다. 어느 쪽도 아니었다.

이유 1 - Python은 PHP가 아닙니다. PHP는 전체적으로 CGI가 될 것으로 기대합니다. 파이썬은 그렇지 않습니다.

이유 2 - 파이썬은 본질적으로 CGI가 아닙니다. 환경 적 기대가 거의없는 통역사입니다.

이유 3 - 파이썬은 결코 CGI로 설계되지 않았습니다. 그렇기 때문에 파이썬은 일반적으로 작은 파이썬 (mod_python, mod_wsgi, mod_fastcgi)에 임베드되어 실행중인 파이썬 프로그램에 더 적합한 형태로 CGI 환경을 캡슐화 할 수 있습니다.

+0

좋아요, 이제 CGI에 대한 자세한 기사를 읽었으며 요점을 생각합니다. – okoman

+0

파이썬은 각 요청에 대해 인터프리터 시작의 오버 헤드를 고려하면 cgi에서 완벽하게 실행됩니다. 허락하면, 나는 그것과 함께 현대적인 웹 사이트를 운영하지 않을 것이지만 그것은 효과가있다. – JimB

+0

Python은 CGI에서 실행되지만 PHP와 동일한 구성에서는 실행되지 않습니다. –

13

유형의 실행 파일을 cgi로 사용할 수 있습니다. 귀하의 문제는 귀하의 아파치 설정에, 당신은 그것을 만든 것처럼 보입니다. 자세한 내용은 아파치 문서를 확인하십시오.하지만 Action 및 AddType은 필요하지 않습니다. 그것을 실행하는지 확인하기

#!/usr/bin/python 
# test.py 
print "Content-Type: text/html\n\n" 
print "Test" 

및 "조기 /cgi-bin/test.py

+0

친절하고 간결한 대답. –

+0

맞아요,하지만 '보통'CGI 스크립트는 원치 않지만 인터프리터 라인을 피하십시오. – okoman

+1

하지만 php CGI는 '보통'cgi입니다. 스크립트를 실행하기 위해 아파치에서 PHP 인터프리터를 호출하고 있습니다. – JimB

1

오류의 결과를 참조하십시오

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 

그런 다음 당신의 cgi-빈에 다음 드롭 스크립트 헤더 끝 : "Unix LF 대신 줄 바꿈을 위해 CRLF 문자를 사용하는 Windows 프로그램에서 .py 파일을 편집 한 경우 발생할 수 있습니다.

Dreamweaver와 같은 일부 프로그램은 환경 설정에서 줄 바꿈 형식을 사용합니다. 메모장은 CRLF도 사용합니다.

호스트에 파일 편집기가있는 경우 현재 줄 바꿈을 백 스페이스하여 테스트하고 CRLF 만 LF로 변경하는 편집기를 통해 다시 입력 할 수 있습니다. 메모장 + +는 LF 만 사용할 수 있습니다.

0

예를 들어 http://localhost/test.py을 열면 Apache가 어떻게 든 시작할 것입니다. /usr/bin/python /var/www/test.py (즉,단일 명령 행 인수가있는 인터프리터). 하지만 이것은 Apache가 이 아닌 CGI 스크립트를 인수로 호출하기 때문에 발생합니다. 대신 CGI에 의해 표준화 된 환경 변수를 통해 모든 정보를 제공합니다.

다른 사람들은 평범한 CGI로 비단뱀을 사용하는 것이 비효율적이라고 지적했으나 교육적 이유로 여전히 시도하고 싶다면 이것을 시도 할 수 있습니다.

#!/usr/bin/python 
import os 
execfile(os.environ['PATH_TRANSLATED']) 

잊지 마세요 가 만드는 : 기본 아파치 CGI-빈 설정은 다음과 같은 내용으로 /usr/lib/cgi-bin에 (당신이 선택 또는 무엇이든) python라는 이름의 래퍼를 생성 할 수 있습니다 활성화되어 있다고 가정

이 실행 파일 : 이제 때

AddType application/python .py 
Action application/python /cgi-bin/python 

: chmod a+x /usr/lib/cgi-bin/python

는 아파치의 설정을이 넣어 open http://localhost/test.py 아파치는/cgi-bin/python을 인수없이 CGI 환경 변수로 채 웁니다. 이 경우 웹 루트의 파일을 직접 가리 키기 때문에 PATH_TRANSLATED을 사용합니다.
execfile을 호출하면 이미 열려있는 파이썬 프로세스 내부에서 해당 스크립트가 해석됩니다.

관련 문제