PHP 的 exec() 打印输出 -- 似乎不遵循规范


PHP's exec() printing output -- doesn't seem to follow specs

我的一个用户遇到了奇怪的行为,似乎不符合PHP exec()规范。

我像这样调用:

exec($cmd, $out, $ret);

我希望这不会生成任何输出,但是用户在出错时看到$cmd打印的错误堆栈跟踪。我的代码中没有任何内容输出任何内容,因此它必须从exec()中出来,但是如何呢?我是否误解了文档?

我希望我可以将其捕获在输出缓冲区中然后处理它,但我宁愿阻止它......无论我做什么,我都想先了解为什么会发生这种情况。

注意:我正在努力从用户那里获取有关PHP版本和其他数据的更多信息,但目前没有这些信息。我只能说它是>= 5.2.4。

您体验到的是正常的 unix 行为:

执行的命令始终有两个输出管道:标准输出和错误输出。文档指出所有输出都将返回。这不包括写入错误输出的内容。即使用单独的管道py来分离错误和正常输出。如果还想捕获它,则必须更改执行的命令,通常通过附加2>&1将错误输出映射到标准输出。