我只是shell_exec在Linux服务器上试验PHP 。这是一个非常酷的功能,到目前为止,我真的很喜欢它。有没有办法查看命令运行时正在进行的实时输出?
shell_exec
例如,如果ping stackoverflow.com运行时正在ping通目标地址,则每次ping通时,都使用PHP显示结果吗?那可能吗?
ping stackoverflow.com
我希望看到缓冲区正在运行时进行实时更新。也许不可能,但肯定会很好。
这是我正在尝试的代码,我尝试过的所有方式都始终在命令完成后显示结果。
<?php $cmd = 'ping -c 10 127.0.0.1'; $output = shell_exec($cmd); echo "<pre>$output</pre>"; ?>
我尝试过将echo零件循环放置,但仍然没有运气。有没有人建议将其显示在屏幕上,而不是等到命令完成后再显示?
echo
我试过exec,shell_exec,system,和passthru。完成后,每个人都会显示内容。除非我使用了错误的语法,否则不会正确设置循环。
exec
system
passthru
读取过程的输出popen()是正确的方法。您的脚本将与程序并行运行,并且您可以通过读取和写入脚本的输出/输入来将其与文件进行交互。
popen()
但是,如果您只想将其转储给用户,则可以直接使用并使用passthru():
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>';
此代码应运行命令,并在运行时将输出直接推给最终用户。