我有一个php文件,它使用shell_exec()
在linux上运行命令。此命令需要一些时间才能完成,并在每个阶段打印出一些内容。我希望php能够回显打印时命令打印的每一行。
我发现使用ob_flush()
和flush()
,可以制作这样的分组http响应,但是在打印时我无法回显行,因为shell_exec()
等待直到命令完成然后返回输出。这样,当命令一次终止全部时,就会回显行。
我相信我应该避免将shell_exec()
用于此目的。我怎么能实现这个目标呢?
答案 0 :(得分:2)
<?php
$cmd = "ping www.google.com";
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a pipe that the child will write to
);
flush();
$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre>";
if (is_resource($process)) {
while ($s = fgets($pipes[1])) {
print $s;
flush();
}
}
echo "</pre>";
答案 1 :(得分:0)