PHP 中的错误报告、级别

2017-12-02 23:24:00
linefo
原创
1396




错误分类


ERROR:致命错误(Fatal error),脚本终止运行


PARSE:编译解析错误,脚本终止运行


WARNING:警告错误,仅给出WARNING信息,脚本不会终止运行

NOTICE:通知错误,仅给出NOTICE信息,脚本不会终止运行(较WARNING更为轻微)


主要的错误分类是上面这四种。

另有其他分类为后期新引入,下面错误级别有列出。


错误级别


(带ERROR的是致命错误,带PARSE的是编译解析错误......以此类推)


【常量】E_ERROR


【值】1

【描述】运行时致命的错误。不能修复的错误。停止执行脚本。

【说明】例如调用一个未定义的方法。


【常量】E_WARNING


【值】2

【描述】运行时非致命的错误。没有停止执行脚本。

【说明】例如用fopen打开一个不存在的文件



【常量】E_PARSE


【值】4

【描述】编译时的解析错误。解析错误应该只由解析器生成。

【说明】例如代码行结尾没有写分号



【常量】E_NOTICE


【值】8

【描述】运行时的通知。脚本发现可能是一个错误,但也可能在正常运行脚本时发生。

【例子】例如使用一个未定义的变量



【常量】E_CORE_ERROR


【值】16

【描述】PHP 启动时的致命错误。这就如同 PHP 核心的 E_ERROR。

【说明】略



【常量】E_CORE_WARNING


【值】32

【描述】PHP 启动时的非致命错误。这就如同 PHP 核心的 E_WARNING。

【说明】略



【常量】E_COMPILE_ERROR


【值】64

【描述】编译时致命的错误。这就如同由 Zend 脚本引擎生成的 E_ERROR。

【说明】略



【常量】E_COMPILE_WARNING


【值】128

【描述】编译时非致命的错误。这就如同由 Zend 脚本引擎生成的 E_WARNING。

【说明】略



【常量】E_USER_ERROR


【值】256

【描述】 用户生成的致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_ERROR。

【说明】略



【常量】E_USER_WARNING


【值】512

【描述】用户生成的非致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_WARNING。

【说明】略



【常量】E_USER_NOTICE


【值】1024

【描述】用户生成的通知。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_NOTICE。

【说明】略



【常量】E_STRICT


【值】2048

【描述】PHP5开始引入,运行时的通知。PHP 建议您改变代码,以提高代码的互用性和兼容性。

【说明】代码可正常运行,但不是推荐的语法,例子和触发情况如下

【例子】函数形参传递++符号


<?php
	function change ( & $var ) {
	 $var += 10 ;
	}
	$var = 1 ;
	change ( ++ $var );


错误提示:



【常量】E_RECOVERABLE_ERROR


【值】4096

【描述】可捕获的致命错误。这就如同一个可以由用户定义的句柄捕获的 E_ERROR(见 set_error_handler())。

【说明】PHP 5.2.0之后引入,可被捕捉的致命错误。 它表示发生了一个可能非常危险的错误,但是还没有导致PHP引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获,将成为一个 E_ERROR从而导致脚本终止运行。



【常量】E_ALL


【值】8191

【描述】所有的错误和警告的级别,除了 E_STRICT(自 PHP 6.0 起,E_STRICT 将作为 E_ALL的一部分)。

【说明】略



参数设置说明


E_ALL 显示所有错误和警告
E_ALL ^ E_NOTICE 除了E_NOTICE的错误报告都显示
E_ALL & ~E_NOTICE 等同上面
E_ALL^E_WARNING^E_NOTICE 除了E_WARNING和E_NOTICE的错误报告都显示
E_ERROR | E_WARNING | E_PARSE 显示E_ERROR、E_WARNING、E_PARSE 这三种错误级别(|表示或者的符号)
PS:^、&、~这些是位运算符


设置方式


通过设置php.ini的几个参数:

display_errors(是否显示错误,关闭仅不在页面展示)

error_reporting(错误报告级别设置)


PS:

log_error参数设置是否记录错误日志(默认记录到服务器软件,如apache的日志文件中,也可指定)


补充


当然我们也可以在代码中使用函数动态设置php.ini的参数(但动态设置时,致命错误不生效?因代码无法执行?)


ini_set("display_errors", "On"); // 确保错误提示开启
error_reporting(E_ALL); // 错误报告级别


PS:

error_reporting(0) 里面的数值是错误常量有效值的和,0代表关闭全部错误报告。1代表E_ERROR
文章分类
联系我们
联系人: Mr.Chen
QQ: 185391277