我看过PHP reading shell_exec live output和PHP: Outputting the system / Shell_exec command output in web browser,但无法完成以下工作。
注意:最初,我的shell脚本运行了一些python,但我简化了它。
live.sh
uname -a
date
watch --no-title date
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>';
?>
uname
和date
输出在浏览器中显示正常,但watch
输出没有。
我实际上是在尝试不可能吗?
答案 0 :(得分:5)
我会反对使用手表的方法,你可能比你预期的更麻烦。
首先,长时间运行的命令可能会受到(默认)PHP超时的影响,因此您可能需要调整它。
然后,观看可能使用终端序列来清除屏幕,我不确定这如何转换为输出代码。
我宁愿建议设置一个客户端机制来定期重复调用服务器端live.php。
这篇关于SO的文章将帮助您入门。 jQuery, simple polling example
上面的页面使用了jquery库,但如果你愿意,你可以使用等效的原生Javascript。
最简单的例子(来自该页面)将是:
function poll(){
$("live.php", function(data){
$("#output_container").html(data);
});
}
setInterval(function(){ poll(); }, 5000);
在您的页面中,为结果设置容器
<div id="output_container"></div>
在您的示例中,您从脚本中删除了手表,并将其替换为您要观看的命令。
答案 1 :(得分:1)