PHP exec和头重定向

时间:2013-01-02 09:32:46

标签: php linux exec

我有一个长期运行的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上运行

3 个答案:

答案 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);
}

礼貌:http://php.net/manual/en/function.shell-exec.php

上发布的评论

答案 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');