【问题标题】:Redirect PHP notices and warnings from STDOUT to STDERR将 PHP 通知和警告从 STDOUT 重定向到 STDERR
【发布时间】:2013-07-22 06:31:11
【问题描述】:

在您在命令行上运行的单个命令上,是否有可用于将所有 PHP 通知和警告重定向到 STDERR 的标志或命令?

我想从命令行解析 JSON 数组,但有时我会收到来自 STDOUT 的通知和警告,导致 JSON 解析失败。

命令如下所示:

rake collect

收集有关本地网站的一些信息是一项艰巨的任务。

【问题讨论】:

    标签: php bash stdout stderr io-redirection


    【解决方案1】:

    根据configuration manual,您需要将display_errors 选项设置为stderr,以便向STDERR 输出警告/错误。

    display_errors 字符串

    这决定了错误是否应该作为输出的一部分打印到屏幕上,或者是否应该对用户隐藏。

    值“stderr”将错误发送到标准错误而不是标准输出。

    您可以通过以下几种方式设置此选项:

    1) 全球范围内(php.ini

    display_errors = stderr
    

    2) 在脚本中本地使用ini_set():

    ini_set('display_errors', 'stderr');
    

    3) 作为命令行参数(不修改任何文件)

    php --define display_errors=stderr script.php
    

    【讨论】:

      【解决方案2】:

      您需要创建一个自定义错误处理程序。

      set_error_handler (function ($errno, $errstr, $errfile, $errline)
      {
              switch ($errno) {
                    case E_USER_ERROR:
                         $ERROR = "CUSTOM ERROR";
                         break;
                    //set cases for each error type
              }
              if($ERROR){
              $stderr = fopen('php://stderr', 'w');
              fwrite($stderr, $ERROR );
              fclose($stderr);
          }
      });
      

      【讨论】:

      • 但是我正在使用 Ruby rake 任务,并且计划是保持服务器端代码不变。
      猜你喜欢
      • 2014-07-22
      • 1970-01-01
      • 2012-08-07
      • 2022-01-18
      • 2011-05-23
      • 2020-06-02
      • 2011-07-22
      • 2012-07-14
      • 1970-01-01
      相关资源
      最近更新 更多