我有一个长期运行的PHP脚本,我希望在用户操作后在服务器上的后台执行。并且应该将用户重定向到其他页面,而命令应该在后台运行。 以下是代码
$command = exec('php -q /mylongrunningscript.php');
header("Location: /main.php?action=welcome");
以上脚本运行正常,但在执行 $command = exec('php -q /mylongrunningscript.php');
之前,页面不会重定向。
我希望该用户应立即重定向到欢迎页面。
还有其他方法可以完成这项任务。 另一个想法是$ command = exec('php -q /mylongrunningscript.php');应该在欢迎页面上执行,但是在执行命令后会显示欢迎页面HTML。命令大约需要5,6分钟,这个时间页面不会重定向。
我使用PHP 5.3在Cent Cent OS上运行
答案 0 :(得分:3)
你可以试试这个:
$result = shell_exec('php -q /mylongrunningscript.php > /dev/null 2>&1 &');
PS:请注意,这是将stdout和stderr重定向到/dev/null
如果要捕获输出,请使用:
$result = shell_exec('php -q /mylongrunningscript.php > /tmp/script.our 2>&1 &');
或者使用此PHP函数在后台运行任何Unix命令:
//Run linux command in background and return the PID created by the OS
function run_in_background($Command, $Priority = 0) {
if($Priority)
$PID = shell_exec("nohup nice -n $Priority $Command > /dev/null & echo $!");
else
$PID = shell_exec("nohup $Command > /dev/null & echo $!");
return($PID);
}
上发布的评论
答案 1 :(得分:2)
如PHP的exec()
手册页所述:
如果程序是使用此功能启动的,则为了它 继续在后台运行,程序的输出必须是 重定向到文件或其他输出流。没有这样做会 导致PHP挂起,直到程序执行结束。
让我们这样做,使用2>&1
(基本上2是stderr
,1是stdout
,所以这意味着“将所有stderr消息重定向到stdout “):
shell_exec('php -q /mylongrunningscript.php 2>&1');
或者如果你想知道它的输出:
shell_exec('php -q /mylongrunningscript.php 2>&1 > output.log');
答案 2 :(得分:1)
将脚本输出发送到/ dev / null,exec函数将立即返回
$command = exec('php -q /mylongrunningscript.php > /dev/null 2>&1');