我正在尝试在网页上运行一个将实时返回其输出的进程.例如,如果我运行'ping'进程,它应该在每次返回一个新行时更新我的页面(现在,当我使用exec(命令,输出)时,我被迫使用-c选项并等待进程完成以查看在我的网页上输出).有可能在PHP中这样做吗?
我也想知道当有人离开页面时,杀死这种过程的正确方法是什么.在"ping"过程中,我仍然可以看到系统监视器中运行的进程(有意义).
我只是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>";
?>
Run Code Online (Sandbox Code Playgroud)
我试过把这个echo部分放在一个循环中,但仍然没有运气.任何人都有任何建议让它显示屏幕上的实时输出而不是等到命令完成?
我试过exec,shell_exec,system,和passthru.它们中的每个人都在完成后显示内容.除非我使用了错误的语法或者我没有正确设置循环.
我已经看过PHP读取shell_exec实时输出和PHP:在Web浏览器中输出system/Shell_exec命令输出,但无法获得以下工作.
注意:最初,我的shell脚本运行了一些python,但我简化了它.
live.sh
uname -a
date
watch --no-title date
Run Code Online (Sandbox Code Playgroud)
live.php
<?php
$cmd = "sh live.sh";
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>';
?>
Run Code Online (Sandbox Code Playgroud)
该uname和date输出出现在浏览器不错,但watch不输出.
我其实是在尝试不可能的事吗?