【发布时间】:2017-02-14 10:45:59
【问题描述】:
我想在 PHP 中异步执行一个 shell 命令。 IE。 PHP 不应等待命令完成才能继续执行。然而,与 Stackoverflow 上关于该主题的众多问题相比,我确实关心程序的输出。特别是我想做这样的事情:
exec("some command", $output_array, $has_finished);
while(count($output_array) > 0 && !$has_finished)
{
if(count($output_array) > 0)
{
$line = array_shift($output_array);
do_something_with_that($line);
} else
sleep(1);
}
do_something_with_that($line)
{
echo $line."\n";
flush();
}
如果exec 会立即返回,同时仍在向数组添加元素,并且如果有方法可以检查进程是否已终止,则上述代码将起作用。
有没有办法做到这一点?
【问题讨论】:
-
您可以生成一个执行此操作的线程并检查该线程的状态。可能有很多资源可以检查。但是你不能用原生 PHP 做到这一点,需要一个模块或库。
-
@apokryfos proc_open 是一个非常原生的 PHP 函数。 Libs 只是让使用它更方便。