5

test.php包含以下行:

<?php echo 1 / 0; ?>

PHP版本是5.4.0 (cli)

现在,一系列测试display_errors

  • display_errors = Off 图像1
  • display_errors = stderr 图2
  • display_errors = stdout 图3

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

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

4

1 回答 1

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.

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

第一个错误被发送到 SAPI 错误记录器,第二个被发送到 stdout (display_errors = on)。两条消息都会显示,因为正如我上面提到的,SAPI 错误记录器是标准错误,在这种情况下也是标准输出。

于 2012-05-27T14:10:03.557 回答