我有以下php代码:
exec('curl -X POST http://mysite.com', $output =array());
返回字符串my http://mysite.com未显示在shell上,但显示以下字符串:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 3 0 3 0 0 19 0 --:--:-- --:--:-- --:--:-- 0
我不希望在shell上显示任何内容。如何在使用exec()命令时禁用对shell的引用。还有其他命令吗?
答案 0 :(得分:7)
使用curl的静音选项:-s
exec('curl -s http://us.php.net/manual/en/function.ob-clean.php', $output);
答案 1 :(得分:2)
stdout 流输出由php exec()
函数捕获。但是, stderr 流不是,因此有些东西出现在屏幕上而有些则不出现。
在这种情况下会发生这种情况,因为curl
正在输出stderr
信息流的状态信息。
解决方案:
将 stderr 重定向到 null设备,将2>/dev/null
附加到exec()
(2> nul
在Windows中执行的命令)。这将处理发送到 stderr 的任何消息。
或者通过附加2>&1
将 stderr 流重定向到 stdout 。这将允许使用exec()
捕获两个输出,以防您在PHP脚本中需要它们。
对于问题中的特定情况,使用curl's silent option可能更有意义。 :P