欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP错误类型与处理

程序员文章站 2022-06-24 08:50:14
1.PHP错误级别 E_ERROR严重错误,脚本终止执行 E_WARNING警告,非严重错误,脚本继续执行 E_NOTICE提示,不是很重要 代码实例 结果 可以看到在NOTICE 和 WARNING之后,语句继续执行,而ERROR之后的语句就没有执行,如果将第5行的代码换到第1行那么后面的两条语句 ......
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之后继续执行";//调用一个不存在的函数,这是一个错误

 

 

 

    结果

PHP错误类型与处理

    可以看到在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 ?>

 

    

    结果

       PHP错误类型与处理

    

    注:

      代码中国将原来会产生ERROR的哪一行给删除了,如果不删除,这段代码是无法正常执行的,这是因为E_ERROR这种高级别的错误是不会被这个句柄处理的。

      使用set_error_hand之后error_reporting会失效,也就是说所有错误信息都交给自定义函数处理