2009-11-01 3 views
1

웹에서 갈래 PHP 응용 프로그램을 실행할 때의 단점은 무엇입니까?forked php apps 실행

나는 그것이 어떤 이유로 든 아파치에서 실행되어서는 안된다는 것을 읽었지만 결코 설명하지 못했다.
내가 생각할 수있는 유일한 이유는 스크립트가 실행 중간에 종료되면 분기 된 프로세스가 절대로 종료되지 않고 메모리 누수가 발생할 수 있다는 것입니다.

문제는

<?php 
$pid = pcntl_fork(); 
if ($pid) 
{ 
    //parent, execute parent code 
} 
else 
{ 
    //child code 
} 
?> 

내가이 가정에서 수정하고있는 pcntl 확장에 관해서는 무엇입니까?

+0

clarifiy this : PHP 용 PCNTL 확장 (http://php.net/manual/en/function.pcntl-fork.php)에 대해 이야기하고 있습니까? – Max

+0

나는 다중 처리와 php로 프로세스를 포크하는 데 php-fpm을 사용할 것을 권장한다. – LeonanCarvalho

답변

3

Apache 서버 프로세스에서 fork()를 호출하면 (그리고 exec하지 않을 경우) 정말 나쁜 생각입니다.

주된 문제는 파일 설명자가 여전히 부모와 공유된다는 것입니다. 즉, 데이터베이스 연결 및 소켓과 같은 것들이 유용하지 않은 방식으로 공유됩니다.

대신 fork()를 사용하는 대신 별도의 프로세스를 생성하십시오. PHP를 실행하려면 PHP 명령 줄 실행 파일을 실행하여 원하는대로 수행하십시오.

그렇지 않으면 Apache가 잘못된 작업을 수행하게됩니다. 예를 들어 부모 프로세스가 동일한 연결에서 더 많은 요청을 처리하고 분기 된 프로세스가 일부 출력을 보내면 임의의 지점에서 인터리브됩니다. 겉으로보기에는 무작위로 진단하기 어려운 오류가 발생합니다. SSL (SSL 세션에 오류가 포함되어 예기치 않게 종료되어 사용자 환경에서 이상한 브라우저 오류가 발생하는 경우)이 문제가되지 않습니다.

fork()가 편리하지만, 위험 부담이되지 않습니다. 일반적인 경우에는 작동하지 않습니다.