Echo逐行执行命令的结果

时间:2014-11-15 21:29:37

标签: php linux command exec

我有一个php文件,它使用shell_exec()在linux上运行命令。此命令需要一些时间才能完成,并在每个阶段打印出一些内容。我希望php能够回显打印时命令打印的每一行

我发现使用ob_flush()flush(),可以制作这样的分组http响应,但是在打印时我无法回显行,因为shell_exec()等待直到命令完成然后返回输出。这样,当命令一次终止全部时,就会回显行。

我相信我应该避免将shell_exec()用于此目的。我怎么能实现这个目标呢?

2 个答案:

答案 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>";

Source

答案 1 :(得分:0)

您需要刷新输出缓冲区才能立即打印:

echo "hello world\n";
flush();

查看flush()

的文档