我看到PHP读取shell_exec实时输出和PHP:在web浏览器中输出system/shell_exec命令输出,但无法获得以下工作
注:最初,我的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
的输出。
我建议不要使用watch,你可能会遇到比你想象的更多的麻烦。
首先,长时间运行的命令可能会受到(默认的)PHP超时的影响,所以您可能需要调整它。
然后,watch可能使用终端序列来清除屏幕,我不确定这如何转换为输出代码。
我宁愿建议建立一个客户端机制,定期重复调用服务器端live.php。
这篇关于SO的文章将帮助你开始。jQuery,简单轮询示例
上面的页面使用jquery库,但是如果你愿意,你也可以使用原生Javascript。
最简单的例子是:
function poll(){
$("live.php", function(data){
$("#output_container").html(data);
});
}
setInterval(function(){ poll(); }, 5000);
在你的页面中,为你的结果设置一个容器
<div id="output_container"></div>
在您的示例中,您从脚本中删除了watch,并将其替换为您要监视的命令。
您可能只在某些特殊情况下需要这样做。因此,对于这些,您可以尝试ajaxterm。
真的很容易使用,(4)。行安装)
wget http://antony.lesuisse.org/software/ajaxterm/files/Ajaxterm-0.10.tar.gz
tar zxvf Ajaxterm-0.10.tar.gz
cd Ajaxterm-0.10
./ajaxterm.py
,您将得到完整的bash在浏览器中交互式运行。(登录/密码后)。用python写的,所以很容易适应你。