Erlo

PHP错误类型与处理

收藏 2018-01-10 23:46:38   406   博客园
页面报错/反馈
点赞

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会失效,也就是说所有错误信息都交给自定义函数处理

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认