PHP 的display_errors 分析

很少原创: 有不对的地方一定要指出来呀!

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 指定了文件,也不往里面记录错误

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据