现在,我有如下代码。
$output = shell_exec( !-- unix commands are here --! );
echo $output;
我有一个网站,单击特定按钮后,就会输出 shell 脚本并显示在浏览器上。这工作得很好。唯一的问题是,在完成之前,我看不到输出发生了什么。我必须等待大约 5-7 分钟,然后我看到大约一百行输出。我正在尝试在输出执行时将输出推送到浏览器 - 我希望能够实时(在浏览器上)看到输出。
我尝试使用popen
、proc_open
、flush()
、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);
值得一试。