我的一个用户遇到了奇怪的行为,似乎不符合PHP exec()
规范。
我像这样调用:
exec($cmd, $out, $ret);
我希望这不会生成任何输出,但是用户在出错时看到$cmd
打印的错误堆栈跟踪。我的代码中没有任何内容输出任何内容,因此它必须从exec()
中出来,但是如何呢?我是否误解了文档?
我希望我可以将其捕获在输出缓冲区中然后处理它,但我宁愿阻止它......无论我做什么,我都想先了解为什么会发生这种情况。
注意:我正在努力从用户那里获取有关PHP版本和其他数据的更多信息,但目前没有这些信息。我只能说它是>= 5.2.4。
您体验到的是正常的 unix 行为:
执行的命令始终有两个输出管道:标准输出和错误输出。文档指出所有输出都将返回。这不包括写入错误输出的内容。即使用单独的管道py来分离错误和正常输出。如果还想捕获它,则必须更改执行的命令,通常通过附加2>&1
将错误输出映射到标准输出。