Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:exec古怪_Php_Console_Exec - Fatal编程技术网

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

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

但是,我不明白一个没有缓冲的东西是如何进入一个缓冲字符串的中间的!