2012-12-10 4 views
7

현재 사용 가능한 컨텐츠에서 demenad에 대한 epub을 생성하려고합니다. 불행하게도, EPUB에 대한 내용을 많이있을 때, 그것은 잠시에게 HTTP 요청을 완료 할 (경우에 따라 10 분) 소요 -PHP - 장기 실행 백그라운드 작업

내가 사파리와 유사한 접근 방식을 따르십시오 적합하지 않습니다 은 - 시간이 오래 걸릴 수 PHP에서 백그라운드 작업/스레드를 실행하기위한 가장 좋은 방법은 당신이 할 수있는

+1

공유 웹 호스트를 사용하는 경우 호스트가 오랜 시간 동안 스크립트를 실행하지 못하게 할 수 있습니다. 따라서 가능한 경우 작업을 청크에 넣어야 할 수도 있습니다. –

답변

16

당신은 장기 실행 PHP 프로세스에주의를 기울이기를 원합니다. PHP의 메모리 효율은 그리 좋지 않습니다 (예를 들어, PHP에서 단지 100 개의 int 배열로 15KB의 메모리를 소비 할 수 있습니다). 대부분의 사람들은 PHP를 웹 사이트 용으로 사용하고 있기 때문에 99 %의 유스 케이스에서는 정상적으로 작동하며, 이러한 프로세스는 초 단위로 실행되므로 메모리가 속도를 위해 희생됩니다. 그러나 장기간 실행되는 프로세스 (특히 많은 프로세스가있는 경우)의 경우이 방법이 최상의 솔루션이 아닐 수 있습니다.

PHP에서 exec/shell_exec 함수가 내부적으로 스트림으로 구현되어 있으므로 (예 : 데이터를 반환하기 위해 일반적으로 스트림에서 대기해야하므로 부모 프로세스에서 블로킹을 일으킬 수 있음) 매우 조심해야합니다.

작업을 배경으로하는 옵션 중 하나는 fork입니다. 그러나 gearman (php extensions도 참조)과 같은 적절한 작업 관리자를 사용하거나 amqp 또는 zmq과 같은 대기열을 사용하여 이러한 작업을보다 명확하게 처리 할 것을 강력히 권장합니다. 어느 것이 당신의 유스 케이스에 더 적합한 지, 내가 결정하게 할 것이다.

1

을 완료하는 데 무엇 - 문서를 사용할 수있을 때

내 질문은 사용자를 ePub 파일을 생성 및 이메일 명령을 실행하십시오.

$command = 'nohup >/dev/null 2>&1 /your/background/script.php &'