设置php错误提示,深入理解php的错误提示设置

php使用error_reporting函数设置错误提示,这个很多人知道,但是发现很多人不是很理解具体设置的问题,有时候设置了error_reporting(0),还是会出现报错提示,有时候设置成error_reporting(E_ALL)则反而不显示错误提示。下面我来详细讲解下php的错误提示设置。

php主要是由以下几个函数控制报错的

display_errors

开启状态下,若出现错误,则报错,出现错误提示

关闭状态下,若出现错误,则提示:服务器错误。但是不会出现错误提示

log_errors

设置是否开启错误日志记录

error_reporting

error_reporting = E_ALL & ~E_NOTICE 用于设置错误提示级别

所以说要开启错误提示,首先得开启display_errors,error_reporting仅仅是用于设置错误提示级别得。

ini_set('display_errors','On');

error_reporting(E_ALL);

echo $a;

Notice: Undefined variable: a in /home/www/tp5/public/index.php on line 4

例如上面代码,由于$a未定义所以报了个notice错误

ini_set('display_errors','Off');

error_reporting(E_ALL);

echo $a;

例子中关闭了错误提示所以error_reporting设置不起作用

ini_set('display_errors','Off');

error_reporting(0);

echo $a

Parse error: syntax error, unexpected end of file, expecting ',' or ';' in /home/www/tp5/public/index.php on line 30

上述例子我故意把最后一行的分号去掉,提示parse error错误了。奇怪,为什么明明关闭了错误提示还是会报错?

要理解这个问题首先我们先看下PHP里面的错误级别

Deprecated最低级别错误,程序继续执行,一般是低版本函数的预提示错误

Notice 通知级别的错误 如直接使用未声明变量,程序继续执行

Warning 警告级别的错误,可能得不到想要的结果

Fatal error 致命级别错误致命级别错误,程序不往下执行

parse error 语法解析错误,最高级别错误,连其他错误信息也不呈现出来

E_USER_相关错误 用户设置的相关错误

一般来说parse error 是最致命的,翻译成中文就是语法错误。parse error的报错是在PHP解析的过程中已经报错,其他的报错都是php解析完成之后报错。所以就是说parse error报错会导致php解析失败,文件没有执行到,自然其他错误也不会呈现出来。但是却会报parse error错误,但是整个错误并发PHP执行的时候的错误,是解析的时候的错误。那是不是说display_errors对parse error这个级别得报错不起作用呢?非也。display_errors是可以控制所有报错的显示的,但是你这个display_errors是在php里面作用,也就是解析之后才作用。也就是仅仅是局部作用。要想全局作用的话就要在php.ini文件里面设置

display_errors = On 改成display_errors = Off.

重启php服务

这时候你打印phpinfo你会看到display_errors对应的Master Value已经改成off说明全局设置已经生效。

这时候你再运行上面的代码你会发现报错提示不见了,取而代之的是返回500的服务器错误。也就是说局部作用只是作用在php解析之后运行的文件里面,而全局master value是作用在php整个解析运行过程中。

再举个例子,有时候开发的时候由于你配置文件里面的display_errors处于关闭状态,但是你在php里面开启了display_errors没有报错

ini_set('display_errors','on');

error_reporting(E_ALL);

echo 1

也是因为由于语法错误导致PHP文件解析失败,文件根本就没有执行到,所有肯定是不报错。那你就只能去修改配置文件的display_error

总结:线上环境可以关闭display_error全局配置,防止错误信息泄露。开发环境使用局部配置搭配error_reporting控制错误提示是否显示并且具体显示什么级别的错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值