2

现在,我的代码如下。

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

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

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

完成此任务的最简单方法是什么?

4

1 回答 1

1

因为 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);

值得一试。

于 2012-06-10T03:25:52.963 回答