CLI二进制文件中的错误报告行为

Uns*_*ned 5 php command-line-interface

test.php 包含以下行:

<?php echo 1 / 0; ?>
Run Code Online (Sandbox Code Playgroud)

PHP版本是 5.4.0 (cli)

现在,进行一系列测试display_errors:

  • display_errors = Off 此搜索
  • display_errors = stderr 图像2
  • display_errors = stdout 图像3

为什么不Off关闭错误显示stdout

为什么两者stdout同时stderr最终同时打印到两个输出?

Ger*_*osi 12

为什么Off不关闭stdout上的错误显示?

我想因为没有设置error_log.如果已设置,则不显示错误.如果未设置,PHP将使用SAPI错误记录器,即CLI中的stderr(= stdout).看到:

ini_set('display_errors', 0);
echo 1 / 0; // Prints a warning.

ini_set('error_log', '/dev/null');
echo 1 / 0; // No warning on the standard output.
Run Code Online (Sandbox Code Playgroud)

为什么stdout和stderr最终同时打印到两个输出?

第一个错误发送到SAPI错误记录器,第二个错误发送到stdout(display_errors = on).显示这两条消息是因为如上所述,SAPI错误记录器是stderr,在这种情况下也是stdout.