PHP exec()没有返回

时间:2012-02-15 19:20:18

标签: php

我正在编写一个PHP脚本,它将在服务器上启动一个程序。

我这样做:

exec('myAppName');

这行代码“有效”,因为它实际执行程序,但是,我不能让它从这一行返回(继续过去)。

它会挂起,直到我手动关闭已打开的程序或超出max_execution_time。

我错过了一些明显的东西吗?

4 个答案:

答案 0 :(得分:1)

manual for exec,虽然在等待已启动的程序退出的问题上并不完全清楚,但声明返回值为

  

返回值:命令结果的最后一行。

换句话说,正如您所观察到的那样,为了返回最后一行输出,exec将不会返回,直到启动的程序退出。

答案 1 :(得分:0)

你需要对它进行背景,以便继续使用我认为的其他PHP。

在Unix / Linux中,使用“&”字符。 ..

嗯,或者是那个那样做的系统......该死的,现在不记得了 - 会再次阅读本手册。

答案 2 :(得分:0)

要在PHP中处理流程,您需要执行以下操作:

function spawnBackgroundProcess($sProcessLine)
{
    $aPipes = array();

    $rProcess = proc_open($sProcessLine, array(), $aPipes);
    proc_close($rProcess);
}

真的是在滥用proc_ *系列,但这是最好的方式。

(别忘了&!)

答案 3 :(得分:0)

如果您想在后台执行命令而不让脚本等待结果,您可以执行以下操作:

<?php
passthru("/usr/bin/php /path/to/script.php ".$argv_parameter." >> /path/to/log_file.log        2>&1 &");
?>

这里有一些重要的事情。

首先:把完整路径放到php二进制文件中,因为这个命令将在apache用户下运行,你可能没有像该用户那样设置php命令别名。

第二:注意命令字符串末尾的两件事:'2&gt;&amp; 1'和'&amp;'。 '2&gt;&amp; 1'用于将错误重定向到标准IO。而最重要的是'&amp;'在命令字符串的末尾,告诉终端不要等待响应。

第三:确保您对'log_file.log'文件

拥有777权限

享受!