所以我试图从我的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脚本处理电子邮件通知。
任何?
谢谢,我很感激
答案 0 :(得分:10)
来自system功能文档:
注意:如果使用此功能启动程序,为了使程序在后台继续运行,程序的输出必须重定向到文件或其他输出流。如果不这样做将导致PHP挂起,直到程序执行结束。
只需重定向Perl脚本的输出,PHP就可以运行而无需等待脚本完成。
system("blah.pl arg1 > /dev/null 2>&1 &");
答案 1 :(得分:2)
你可以添加一个&符号来在后台生成进程吗?
if (system("blah.pl arg1 &") != 0)
答案 2 :(得分:0)
你可以使用popen函数
答案 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")