php 普通错误和致命错误捕获及处理

/**
如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值:
值 常量 描述

1 E_ERROR 致命的运行错误。错误无法恢复,暂停执行脚本。

2 E_WARNING 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止。

4 E_PARSE 编译时解析错误。解析错误只由分析器产生。

8 E_NOTICE 运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。)

16 E_CORE_ERROR PHP启动时初始化过程中的致命错误。

32 E_CORE_WARNING PHP启动时初始化过程中的警告(非致命性错)。

64 E_COMPILE_ERROR 编译时致命性错。这就像由Zend脚本引擎生成了一个E_ERROR。

128 E_COMPILE_WARNING 编译时警告(非致命性错)。这就像由Zend脚本引擎生成了一个E_WARNING警告。

256 E_USER_ERROR 用户自定义的错误消息。这就像由使用PHP函数trigger_error(程序员设置E_ERROR)

512 E_USER_WARNING 用户自定义的警告消息。这就像由使用PHP函数trigger_error(程序员设定的一个E_WARNING警告)

1024 E_USER_NOTICE 用户自定义的提醒消息。这就像一个由使用PHP函数trigger_error(程序员一个E_NOTICE集)

2048 E_STRICT 编码标准化警告。允许PHP建议如何修改代码以确保最佳的互操作性向前兼容性。

4096 E_RECOVERABLE_ERROR 开捕致命错误。这就像一个E_ERROR,但可以通过用户定义的处理捕获(又见set_error_handler())

8191 E_ALL 所有的错误和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0)

**/

//
禁止错误输出 error_reporting(0); //设置错误处理器 set_error_handler('errorHandler'); register_shutdown_function('fatalErrorHandler'); class Test{ public function index(){ //这里发生一个警告错误,出发errorHandler echo $undefinedVarible; } } function errorHandler($errno,$errstr,$errfile,$errline){ $errorType = [ E_ERROR=>'致命性运行时错', E_PARSE=>'编译时解析错误', E_CORE_ERROR=>'发生于PHP启动时初始化过程中的致命错误', E_COMPILE_ERROR=>'编译时致命性错', E_USER_ERROR=>'用户产生的出错消息', ]; $arr = array( '['.date('Y-m-d h-i-s').']', '|', $errorType[$errno], $errstr, $errfile, 'line:'.$errline, ); //写入错误日志 //格式 : 时间 uri | 错误消息 文件位置 第几行 error_log(implode(' ',$arr)."\r\n",3,'./test.txt','extra'); echo implode(' ',$arr)."\r\n"; } //捕获fatalError function fatalErrorHandler(){ $e = error_get_last(); switch($e['type']){ case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: errorHandler($e['type'],$e['message'],$e['file'],$e['line']); break; } } $test = new Test(); ////这里发生一个警告错误,被errorHandler 捕获 $test->index(); //发生致命错误,脚本停止运行触发 fatalErrorHandler $test = new Tesdt(); $test->index();

 

posted on 2017-08-08 17:42  小乔流水人家  阅读(337)  评论(0)    收藏  举报

导航