如何禁用PHP exec函数打印到shell?

时间:2010-09-02 20:43:29

标签: php exec

我有以下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的引用。还有其他命令吗?

2 个答案:

答案 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