PHP:exec古怪
这是我的代码:PHP:exec古怪,php,console,exec,Php,Console,Exec,这是我的代码: $command = 'path to some script'; echo "Running command:\n $command "; $result = array (); exec ($command, $result); 其结果如下: 正在运行的命令: [这是命令本身打印的一些警告] 某些脚本的路径 即脚本的错误输出,以某种方式插入到它前面的回音命令的中间(!)。 想法?这将取决于缓冲io与非缓冲io。
$command = 'path to some script';
echo "Running command:\n $command ";
$result = array ();
exec ($command, $result);
其结果如下:
正在运行的命令:[这是命令本身打印的一些警告]
某些脚本的路径
即脚本的错误输出,以某种方式插入到它前面的回音命令的中间(!)。
想法?这将取决于缓冲io与非缓冲io。错误输出为stderror,另一个为stdout。Stdout通常是缓冲的——因此,如果在运行脚本之前强制它刷新,您将得到想要的结果
试试这个这是因为
exec
不捕获标准错误(stderr),例如:
exec ('/bin/echo foo > /dev/stderr', $result);
将输出foo
,即使exec
不应输出任何内容。您可以通过执行以下操作将其强制:
exec ($command.' 2>&1', $result);
它出现在中间的原因可能是因为输出缓冲(如上文所解释的丹尼)。输出缓冲区可能在命令结束前耗尽,因此会自动刷新,并启动一个新的缓冲区。因此,错误出现在中间。但是,我不明白一个没有缓冲的东西是如何进入一个缓冲字符串的中间的!