PHP错误处理机制

php基础

浏览数:89

2019-9-6

AD:资源代下载服务

PHP错误简介

错误

        PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式. 这样,你就可以根据自己的需要,来更改和加强错误输出信息以满足实际需要.

        常见的错误类型有:语法错误、环境错误、逻辑错误。平时遇到的warning、notice都是错误,只是级别不同而已。

        常见的错误级别有:Deprecated(最低级别)、Notice(通知)、Warning(警告)、Fatal(致命)、Parser(语法解析),E_USER_相关错误。     查看PHP所有的错误级别:PHP错误预定义常量

        在 PHP 中,默认的错误处理很简单。一条错误消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的消息。

下面将详细介绍几个常用的错误处理函数:

错误处理函数

1、error_reporting  设置PHP的报错级别

1)通过修改PHP配置文件中的error_reporting选项值

    如,在php.ini设置如下:error_reporting = E_ALL

2)通过error_reporting()函数设置

    如:

    error_reporting(0);  // 关闭所有PHP错误报告

    error_reporting(-1);  // 报告所有 PHP 错误

    error_reporting(E_ALL); //和error_reporting(-1)一样

3)通过ini_set() 函数运行时设置

    ini_set(‘error_reporting’,E_ALL); 

2、display_errors 设置是否将错误信息

该选项设置是否将错误信息作为输出的一部分显示到屏幕,或者对用户隐藏而不显示。

1) ini_set(‘display_errors’,1);

2)在php.ini设置如下:display_errors = On

说明:display_errors设置为On, 会将错误显示到浏览器上,不管是On还是Off都会记录到你错误日志里面,前提是配置了错误日志log_errors和error_log

3、set_error_handler  设置一个用户定义的错误处理函数

1)如:set_error_handler(‘my_error’); //my_error()为自定义的错误处理方法。

2)如果把自定义的错误封装到了一个类上,则使用数组的方式调用:

set_error_handler(array(‘MyErrorHander’ , ‘deal’));  //MyErrorHander为错误类,deal为处理方法。

3)set_error_handler()参数介绍如下:

set_error_handler()参数

注: 

1) 以下级别的错误不能由用户定义的函数来处理: 

 E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING,和在  调用set_error_handler()函数所在文件中产生的大多数E_STRICT

2)如果错误发生在脚本执行之前(比如文件上传时),将不会  调用自定义的错误处理程序因为它尚未在那时注册。

4、trigger_error()  产生一个用户级别的 error/warning/notice 信息

bool trigger_error (string $error_msg [,int $error_type = E_USER_NOTICE] );

error_msg: 该 error 的特定错误信息,长度限制在了1024个字符。超过1024长度的字符都会被截断。

error_type: 该 error 所特定的错误类型。仅 E_USER 系列常量对其有效,默认是E_USER_NOTICE。

5、error_log —发送错误信息到某个地方

将错误记录到指定日志中的方法:

1)在配制文件中:error_log = E:\phpStudy\MyError\test_error.txt

2)运行时设置:ini_set(‘error_log’ , ‘E:\phpStudy\MyError\test_error.txt’);

3)使用error_log函数:error_log(“You messed up!”,3,”./error/my-errors.log”);

将错误记录到系统日志当中:

运行时配置如:ini_set(‘error_log’ , ‘syslog’); 这个比较少用,具体查看方法这里不做多介绍,可以自行百度或google。

将错误发送到指定邮箱:

如:error_log(‘当前系统被人攻击啦,产生致命错误!!!’ , 1 , ‘2737555@qq.com’);  

当然,能成功发送的前提是得做好你的邮箱相关配制。

6、error_get_last()  获取最后发生的错误

返回了一个关联数组,描述了最后错误的信息,以该错误的 “type”、    “message”、”file” 和 “line” 为数组的键。  如果该错误由 PHP 内置函数导致的,”message”会以该函数名开头。  如果还没有错误则返回NULL。

注意:

1)使用@符号可以抑制错误输出。

2)PHP配制文件中与错误相关选项

常用案例

例1、自定义错误处理函数

开始测试:

divide(0,1);   报错如:My WARNING:[512] The denominator cannot be zero ! — on line 30 in file E:\phpStudy\WWW\test\index.php

divide(3,0);   报错如:My NOTICE:[1024] You numerator is zero, it just a notice . — on line 34 in file E:\phpStudy\WWW\test\index.php   并继续输出计算结果:0

divide(3,’d’);  报错如:My ERROR:[256] denominator and numerator must be number !       Fatal error on line 27 in file E:\phpStudy\WWW\test\index.php, PHP 5.6.27 (WINNT)      Aborting…   到这里就中断会程序,下面还有程序也不会执行。

divide(2);   在这里共报3个错误,如下:

divideee(3,’d’);   这里调用了PHP内部的错误处理:Fatal error: Call to undefined function divideee() in E:\phpStudy\WWW\test\index.php on line 42   

说明——以下级别的错误不能由用户定义的函数来处理:      E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING,和在  调用set_error_handler()函数所在文件中产生的大多数E_STRICT

———-   < 例1 测试结束 >   ————-

参考:

官方手册:http://php.net/manual/zh/book.errorfunc.php

个人博客:http://blog.csdn.net/hguisu/article/details/7464977

作者:Nosee123