如何使用PHP的实时反馈运行shell脚本?

时间:2012-03-20 17:27:04

标签: php shell shell-exec

如何在向浏览器提供持续/实时反馈的同时从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秒钟,然后刷新到输出缓冲区。

我想要这样做:在每行输出后冲到输出缓冲区。

2 个答案:

答案 0 :(得分:2)

这可以使用popen()来完成,它可以为您打开任何进程的标准输出提供句柄。可以使用ob_flush()将数据块发送到客户端,可以使用XHR显示数据。

答案 1 :(得分:2)

一种选择是写入shell脚本中的文件,在每一步中说明它的位置。在您的网页上,每隔X秒/分钟使用一次ajax调用。 ajax调用将调用PHP脚本,该脚本读取状态文件并返回状态或已完成的步骤。

此方法的优点是页面实时信息可供多个访问者使用,而不仅仅是实际启动shell脚本的访问者。显然,根据您的需要,这可能是也可能不合适。

缺点当然是ajax间隔时间越长,更新的时间就越早。