一尘不染

PHP阅读shell_exec实时输出

php

我只是shell_exec在Linux服务器上试验PHP
。这是一个非常酷的功能,到目前为止,我真的很喜欢它。有没有办法查看命令运行时正在进行的实时输出?

例如,如果ping stackoverflow.com运行时正在ping通目标地址,则每次ping通时,都使用PHP显示结果吗?那可能吗?

我希望看到缓冲区正在运行时进行实时更新。也许不可能,但肯定会很好。

这是我正在尝试的代码,我尝试过的所有方式都始终在命令完成后显示结果。

<?php

  $cmd = 'ping -c 10 127.0.0.1';

  $output = shell_exec($cmd);

  echo "<pre>$output</pre>";

?>

我尝试过将echo零件循环放置,但仍然没有运气。有没有人建议将其显示在屏幕上,而不是等到命令完成后再显示?

我试过execshell_execsystem,和passthru。完成后,每个人都会显示内容。除非我使用了错误的语法,否则不会正确设置循环。


阅读 839

收藏
2020-05-26

共1个答案

一尘不染

读取过程的输出popen()是正确的方法。您的脚本将与程序并行运行,并且您可以通过读取和写入脚本的输出/输入来将其与文件进行交互。

但是,如果您只想将其转储给用户,则可以直接使用并使用passthru()

echo '<pre>';
passthru($cmd);
echo '</pre>';

如果要在程序运行时在运行时显示输出,可以执行以下操作:

while (@ ob_end_flush()); // end all output buffers if any

$proc = popen($cmd, 'r');
echo '<pre>';
while (!feof($proc))
{
    echo fread($proc, 4096);
    @ flush();
}
echo '</pre>';

此代码应运行命令,并在运行时将输出直接推给最终用户。

2020-05-26