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 
display_errors = stdout 
为什么不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.