test.php
包含以下行:
<?php echo 1 / 0; ?>
PHP版本是5.4.0 (cli)
现在,一系列测试display_errors
:
display_errors = Off
display_errors = stderr
display_errors = stdout
为什么不Off
关闭错误显示stdout
?
为什么两者都stdout
同时stderr
打印到两个输出?
test.php
包含以下行:
<?php echo 1 / 0; ?>
PHP版本是5.4.0 (cli)
现在,一系列测试display_errors
:
display_errors = Off
display_errors = stderr
display_errors = stdout
为什么不Off
关闭错误显示stdout
?
为什么两者都stdout
同时stderr
打印到两个输出?
为什么 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 错误记录器是标准错误,在这种情况下也是标准输出。