显示从shell_exec获取的输出并实时显示,而不是等待5-7分钟后


Show output taken from shell_exec and display it in real time instead of after waiting 5-7min

现在,我有如下代码。

$output = shell_exec( !-- unix commands are here --! );
echo $output; 

我有一个网站,单击特定按钮后,就会输出 shell 脚本并显示在浏览器上。这工作得很好。唯一的问题是,在完成之前,我看不到输出发生了什么。我必须等待大约 5-7 分钟,然后我看到大约一百行输出。我正在尝试在输出执行时将输出推送到浏览器 - 我希望能够实时(在浏览器上)看到输出。

我尝试使用popenproc_openflush()ob_start等。似乎没有任何效果。我只是尝试打开一个文本文件,将输出的内容写入文本文件,然后循环增量读取文本文件。我是 php 初学者,所以我可能没有正确使用上述任何方法。

实现此目的的最简单方法是什么?

因为 PHP 在阻塞模式下运行 exec、system、pass_thru 等,所以你的可能性非常有限。PHP 将要求代码在继续整个脚本之前完成执行,除非您执行类似将以下内容添加到命令中的操作:

"> /dev/null 2>/dev/null &"

当然,这会停止命令的输出,但是......也许是这样的:

exec('command > /cmd_file 2>/cmd_file &');
$file = fopen('/cmd_file', 'r');
while (!feof($file)) {
    echo fgets($file);
    sleep(1);
}
fclose($file);

值得一试。