2009-11-21 4 views
2

그래서 내 PHP 코드에서 일부 스크립트를 실행하려고합니다. 즉실행 및 시스템 호출을 잊지

<?php 
    // .... 
    // just basic web site that allows upload of file... 
?> 

내가

if (system("blah.pl arg1") != 0) 
{ 
    print "error\n"; 
} 
else 
{ 
    print "working on it..you will receive e-mail at completion\n"; 
} 

큰 작동하지만이 작업을 인쇄합니다 때까지이 완료 될 때까지 대기 시스템 호출을 사용하여 내부 blah.php 페이지에 살고있다. php에서 오타가 아니라 perl 스크립트를 사용한다는 것을 알고 있습니다.

어떻게하면 프로그램 실행을 시작하고 백그라운드에서 완료 할 수 있습니까? blah.pl 스크립트는 전자 메일 알림을 처리합니다.

누구나?

덕분에 나는

답변

10

system 기능 문서에서 :

참고 : 프로그램이 백그라운드에서 실행을 계속하기 위해서는이 기능을 시작 경우, 프로그램의 출력을 리디렉션합니다 파일 또는 다른 출력 스트림에. 그렇게하지 않으면 프로그램 실행이 끝날 때까지 PHP가 멈추게됩니다.

Perl 스크립트의 출력을 리디렉션하기 만하면 스크립트가 끝날 때까지 기다리지 않고 PHP를 실행할 수 있습니다.

system("blah.pl arg1 > /dev/null 2>&1 &"); 
2

를 사용할 수 감사?

if (system("blah.pl arg1 &") != 0) 
-1

모든 PHP 명령 줄 함수가 결과를 기다리고 있으므로 전자 메일 스크립트를 호출하는 별도의 페이지가있는 것이 좋습니다.

즉, 결과를 받기 전에 연결을 닫을 수있는 cURL 또는 파일 래퍼를 사용하여 email.php 페이지 (또는 기타)에 요청을 보냅니다. 따라서 프로세스는 다음과 같이 보일 것입니다.

+1

원래 통화의 출력을 리디렉션하는 것보다 효과적이지만 더 많은 리소스를 사용합니다. –

관련 문제