很少原创: 有不对的地方一定要指出来呀!
PHP配置文件中的error_reporting和display_errors两个选项让不少人迷惑,以为报告了就显示,不报告就不显示,干嘛还要使用display_errors呢,如果允许报告错误,又不让显示错误,那将又是什么状态呢? 欲知其中详情,且听我慢慢道来:
实例1.
[root@ljj junjie2]# php -i | grep display_errors
display_errors => Off => Off
[root@ljj junjie2]# php -r "sdfasdf();" 2>/dev/null
[root@ljj junjie2]# php -r "sdfasdf();"
PHP Fatal error: Call to undefined function sdfasdf() in Command line code on line 1
[root@ljj junjie2]#
说明:不允许显示错误时,错误是输出到标准错误的。 这时很正常的呀,没有什么可议论的。
实例2.
[root@ljj junjie2]# php -i | grep display_errors
display_errors => STDOUT => STDOUT
[root@ljj junjie2]# php -r "sdafasd();" 2>/dev/null
Fatal error: Call to undefined function sdafasd() in Command line code on line 1
[root@ljj junjie2]# php -r "sdafasd();"
PHP Fatal error: Call to undefined function sdafasd() in Command line code on line 1
Fatal error: Call to undefined function sdafasd() in Command line code on line 1
[root@ljj junjie2]#
说明: 允许显示错误时,很显然display_errors 的值为STDOUT,经过确认,就是说display_errors 打开的话就是把错误输出到标准输出而不是标准错误了
对于命令行来讲,终端的标准输出与标准错误都是屏幕,从哪里输出都是显示,我们直观上是看不出来的,但是php放到apache中就不一样了,display_errors 设置为on,网页上就能显示php的错误,为off时就不显示php的错误,好像display_errors的设置是给apache看的,其实不是的,apache并不关心php是怎么设置的,apache只是把标准错误写入日志,把标准输出写到网页,所以这就和php的错误输出到哪里关系到一起了。
补充: 关于log_errors 的说明
是否记录错误到日志文件与是否显示(display_errors)是两回事
都写错了,display_error 就是输出或不输出错误,或输出到哪里;
apachce的配置应该是:
display_error = off
log_errors = on
然后 error_log 不要设置
—————————————————–
log_errors = on
记录错误到error_log 指定的文件中;
注意:
1. 如果不指定error_log 文件将不记录,直接输出到标准错误
2. 如果当前用户对error_log 没有写权限,也将直接输出到标准错误
log_errors=off
即使error_log 指定了文件,也不往里面记录错误