PHP错误类型与处理
1.PHP错误级别
E_ERROR严重错误,脚本终止执行
E_WARNING警告,非严重错误,脚本继续执行
E_NOTICE提示,不是很重要
代码实例
1 echo gettype($a); echo "E_NOTICE之后继续执行";//传递一个未定义的变量,这在PHP中是一个小问题 2 3 echo gettype(); echo "E_WARNING之后继续执行";//没有正常向函数传递参数,这会产生一个警告 4 5 echo get3();echo "E_ERROR之后继续执行";//调用一个不存在的函数,这是一个错误
|
结果
可以看到在NOTICE 和 WARNING之后,语句继续执行,而ERROR之后的语句就没有执行,如果将第5行的代码换到第1行那么后面的两条语句都不会执行。
2.关闭错误信息的报告
当遇到这些错误时,脚本会向屏幕输出错误信息,严重的错误还会终止脚本执行。
当不希望PHP将错误信息输出到页面上时,可以在在配置文件 php.ini 中将 display_errors=on (默认) 设置为display_errors=off。
3.调整错误报告级别
可以通过修改配置文件 php.ini 中 error_reporting的值,设置PHP只报告特定级别的错误。
例如:
error_reporting=0相当于display_errors=off不报告任何错误。
error_reporting=级别常量1|级别常量2|级别常量3,只输出这三种级别的错误。
error_reporting=E_ALL&~(级别常量1|级别常量2|级别常量3),表示只有这三种级别的错误不报告
如果不希望修改配置文件,可以直接在脚本中通过error_reporting()函数修改。
4.自定义错误处理
可以发现当出现错误时,PHP直接在出错的地方报告错误,这样有可能会影响到页面布局,并且,直接吧错误信息暴露出来可能会带来风险,所以尽量自己用一个函数去处理错误。
set_error_handler( funcname) 函数用来注册错误处理函数,该函数funcname()必须有四个参数,分别代表错误级别,错误信息,错误文件,错误行。
下面是一个实例,设置一个函数error_hand()将错误信息全部保存下来直到页面的结尾再输出
1 <?php 2 $error_message=''; 3 set_error_handler('error_hand'); 4 5 function error_hand($level,$message,$file,$line) 6 { 7 global $error_message; 8 9 $error_message.="错误级别为:".$level."错误信息:".$message."错误文件:".$file."错误行数:".$line."<br>"; 10 11 } 12 13 echo gettype($a); echo "E_NOTICE之后继续执行<br> ";//传递一个未定义的变量,这在PHP中是一个小问题 14 15 echo gettype(); echo "E_WARNING之后继续执行<br>";//没有正常向函数传递参数,这会产生一个警告 16 17 18 echo "------------------------------------------------------------------------<br>"; 19 echo $error_message; 20 ?>
|
结果
注:
代码中国将原来会产生ERROR的哪一行给删除了,如果不删除,这段代码是无法正常执行的,这是因为E_ERROR这种高级别的错误是不会被这个句柄处理的。
使用set_error_hand之后error_reporting会失效,也就是说所有错误信息都交给自定义函数处理