2009-11-21 32 views
2

所以我试图从我的PHP代码执行一些脚本。生活在页面blah.php运行并忘记系统调用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"; 
} 

伟大的作品,但它一直等待它完成,直到它打印的工作就可以了。 我知道,我打电话来自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页面(或其他),它允许您在收到结果之前关闭连接。所以这个过程看起来像这样。

 page_running.php 
     | 
    cURL call to (email.php?arg1=0) 
     |   | 
final output  email.php 
        | 
        calls system("blah.pl arg1") 
+1

这将工作,但没有优先于重定向原始调用的输出,并会使用更多的资源。 – 2009-11-21 21:45:41