2

所以我试图从我的 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

4 回答 4

10

来自系统功能文档:

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

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

system("blah.pl arg1 > /dev/null 2>&1 &");
于 2009-11-21T19:44:00.510 回答
2

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

if (system("blah.pl arg1 &") != 0)
于 2009-11-21T19:43:17.530 回答
-1

您可能可以使用 popen 功能

http://www.php.net/manual/en/function.popen.php

于 2009-11-21T19:42:10.683 回答
-2

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

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

        page_running.php
        |
    cURL call to (email.php?arg1=0)
        |           |
final output        email.php
                    |
                    calls system("blah.pl arg1")
于 2009-11-21T20:01:47.693 回答