在php中运行并忘记系统调用

时间:2009-11-21 19:39:29

标签: php system-calls

所以我试图从我的PHP代码执行一些脚本。它住在页面blah.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脚本处理电子邮件通知。

任何?

谢谢,我很感激

4 个答案:

答案 0 :(得分:10)

来自system功能文档:

  

注意:如果使用此功能启动程序,为了使程序在后台继续运行,程序的输出必须重定向到文件或其他输出流。如果不这样做将导致PHP挂起,直到程序执行结束。

只需重定向Perl脚本的输出,PHP就可以运行而无需等待脚本完成。

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

答案 1 :(得分:2)

你可以添加一个&符号来在后台生成进程吗?

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

答案 2 :(得分:0)

答案 3 :(得分:-1)

由于所有PHP命令行函数都在等待结果 - 我建议你有一个单独的页面来调用电子邮件脚本。

换句话说,使用cURL或文件包装器向email.php页面(或其他)发送请求,允许您在接收结果之前关闭连接。所以这个过程看起来就像这样。

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