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()参数介绍如下:
注:
1) 以下级别的错误不能由用户定义的函数来处理:
E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_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_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING,和在 调用set_error_handler()函数所在文件中产生的大多数E_STRICT。
---------- < 例1 测试结束 > -------------
参考: