如何在向浏览器提供持续/实时反馈的同时从PHP执行shell脚本? 我从system功能文档中了解到:
system()调用还会尝试自动刷新Web服务器 如果PHP作为服务器运行,则在每行输出后输出缓冲区 模块。
通过将其作为“服务器模块”运行,我不清楚它们的含义。
示例PHP代码:
<?php
system('/var/lib/script_test.sh');
示例shell代码:
#!/bin/bash
echo "Start..."
for i in {1..10}
do
echo "$i..."
sleep 1
done
echo "Done."
这样做:它将等待大约10秒钟,然后刷新到输出缓冲区。
我想要这样做:在每行输出后冲到输出缓冲区。
答案 0 :(得分:2)
这可以使用popen()来完成,它可以为您打开任何进程的标准输出提供句柄。可以使用ob_flush()将数据块发送到客户端,可以使用XHR显示数据。
答案 1 :(得分:2)
一种选择是写入shell脚本中的文件,在每一步中说明它的位置。在您的网页上,每隔X秒/分钟使用一次ajax调用。 ajax调用将调用PHP脚本,该脚本读取状态文件并返回状态或已完成的步骤。
此方法的优点是页面实时信息可供多个访问者使用,而不仅仅是实际启动shell脚本的访问者。显然,根据您的需要,这可能是也可能不合适。
缺点当然是ajax间隔时间越长,更新的时间就越早。