【问题标题】:How to ignore errors in shell_exec?如何忽略 shell_exec 中的错误?
【发布时间】:2017-10-27 08:47:57
【问题描述】:

我在 PHP 中得到一个 shell 命令的输出

$str = shell_exec("command");

并在终端中运行 PHP 脚本。当shell command 返回错误时,将打印在终端上。如何告诉shell_exec 只返回命令输出而不返回任何错误输出?

【问题讨论】:

标签: php error-handling shell-exec


【解决方案1】:

您只需通过将stderr 重定向到/dev/null 来丢弃错误输出

$str = shell_exec("command 2>/dev/null");

非错误输出 - stdout - 将像以前一样存储到 $str


请注意,您不需要使用 @ 运算符抑制 shell_exec 上的错误或将其包装到 try-catch 块中,因为 shell_exec 不会失败(您没有PHP 运行时错误)。

要求执行的命令可能会产生错误,上述方法将抑制输出中的错误。

还有some-command > /dev/null 2>&1,正如其他建议的那样不是你想要的(如果我理解正确你的问题),因为这会丢弃错误和非错误输出。


最后一点:您可以决定捕获/丢弃stdout 和/或stderr

当然,您必须依靠您正在运行的命令将常规输出发送到stdout 并将错误发送到stderr 的事实。如果命令不符合标准(例如,将所有内容发送到 stdout),那么您就不走运了。

【讨论】:

    【解决方案2】:

    如果你想忽略你的命令的错误,你需要修改你的命令来重定向这样的错误:

    some-command > /dev/null 2>&1
    

    【讨论】:

      【解决方案3】:

      您也可以在代码开头这样做:

      ini_set( 'display_errors', 0 );
      error_reporting( E_ALL );
      

      如果设置为 0,则不会看到错误,如果设置为 1,则会看到所有错误

      【讨论】:

      • 有人对此投了反对票,但没有说明原因。原因很简单,正如接受响应的作者所说,shell_exec() 并没有真正失败,即使内部执行的命令失败,您也不会收到 PHP 运行时错误。
      猜你喜欢
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多