PHP:exec古怪

时间:2011-03-23 20:24:06

标签: php console exec

这是我的代码:

        $command = 'path to some script';
        echo "Running command:\n $command ";
        $result = array ();
        exec ($command, $result);

结果如下:

运行命令:
[这里有一些由命令本身打印的警告]
某些脚本的路径

即。脚本的错误输出以某种方式插入到它之前的echo命令的中间(!)。

想法?

2 个答案:

答案 0 :(得分:4)

这将归结为缓冲与非缓冲的io。错误输出将是stderror,另一个将是stdout。 Stdout通常是缓冲的 - 所以如果你在运行脚本之前强制它进行刷新,你将得到你想要的结果。

试试这个http://php.net/manual/en/function.flush.php

答案 1 :(得分:1)

这是因为exec没有捕获标准错误( stderr ),例如:

exec ('/bin/echo foo > /dev/stderr', $result);

输出foo,即使exec不输出任何内容。您可以通过执行以下操作强制执行:

exec ($command.' 2>&1', $result);

它出现在中间的原因可能是因为输出缓冲(如上所述@Danny)。输出缓冲区可能在命令结束之前耗尽,因此会自动刷新,并启动一个新的缓冲区。因此错误出现在中间。