PHP错误及异常统一处理
2017-07-26 00:00
567 查看
php中错误及异常的统一收集并处理,主要就是用到3个内部方法:
1. register_shutdown_function(callable $callback [, mixed $parameter [, mixed $... ]) //php程序执行完成后执行的函数
它执行机制是:当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候它是从内存中调用,不是从PHP页面中调用,所以在此回调函数中不能使用相对路径。以下情况时会触发此函数执行:
1)当页面被用户强制停止时
2)当程序代码运行超时时
3)当PHP代码执行完成时,代码执行存在异常和错误、警告
在错误收集的使用上,需配合php另一个错误收集函数来实现:error_get_last(),代码如:
另外,需要注意:
1)它可以被多次调用,这些被注册的回调会按照他们注册时的顺序被依次调用
2)当程序由于 exit 、die和未处理的异常、错误结束时,不会触发该函数--此种情况,所以需要后面2个错误/异常函数来捕捉
3)PHP4后支持注册函数参数传递
2. set_error_handler(array(‘Debug’,'appError’)); //设置一个用户定义的错误处理函数
3. set_exception_handler(array(‘Debug’,'appException’)); //自定义异常处理。
===========美美的分割线================
注意:set_error_handler()、set_exception_handler()2个注册的回调函数均不会多次调用,即如果注册多个,以最后一个为生效回调。
通过以上3个函数注册,就可以很好的在一个你想要的地方统一接收项目里所以的错误、异常等信息,并做相应的处理,比如写log或展示友好的错误页等
1. register_shutdown_function(callable $callback [, mixed $parameter [, mixed $... ]) //php程序执行完成后执行的函数
它执行机制是:当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候它是从内存中调用,不是从PHP页面中调用,所以在此回调函数中不能使用相对路径。以下情况时会触发此函数执行:
1)当页面被用户强制停止时
2)当程序代码运行超时时
3)当PHP代码执行完成时,代码执行存在异常和错误、警告
在错误收集的使用上,需配合php另一个错误收集函数来实现:error_get_last(),代码如:
register_shutdown_function('ExceptionHandle::fatalError'); //也可以对象方式调用 $a = new ExceptionHandle(); register_shutdown_function([$a,'fatalError']); class ExceptionHandle { // 致命错误捕获 static public function fatalError() { if($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: ob_end_clean(); //此处添加业务逻辑,如记录log或展示错误页面等 break; } } } }
另外,需要注意:
1)它可以被多次调用,这些被注册的回调会按照他们注册时的顺序被依次调用
2)当程序由于 exit 、die和未处理的异常、错误结束时,不会触发该函数--此种情况,所以需要后面2个错误/异常函数来捕捉
3)PHP4后支持注册函数参数传递
2. set_error_handler(array(‘Debug’,'appError’)); //设置一个用户定义的错误处理函数
class ExceptionHandle { /** * 自定义错误处理 * @access public * @param int $errno 错误类型 * @param string $errstr 错误信息 * @param string $errfile 错误文件 * @param int $errline 错误行数 * @return void */ static public function appError($errno, $errstr, $errfile, $errline) { switch($errno) { case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: ob_end_clean(); $errorStr['errno'] = $errno; $errorStr['message'] = $errstr; $errorStr['file'] = $errfile; $errorStr['line'] = $errline; //添加实际错误处理逻辑 break; default: //其他非致命类型错误只记录log,防止对页面影响 break; } } }
3. set_exception_handler(array(‘Debug’,'appException’)); //自定义异常处理。
class ExceptionHandle { /** * 自定义异常处理 * @access public * @param mixed $e 异常对象 */ static public function appException($e) { $error = array(); $error['message'] = $e->getMessage(); $trace = $e->getTrace(); if('E' == $trace[0]['function']) { $error['file'] = $trace[0]['file']; $error['line'] = $trace[0]['line']; } else { $error['file'] = $e->getFile(); $error['line'] = $e->getLine(); } //处理换行 $error['trace'] = $e->getTraceAsString(); //添加实际异常处理逻辑 } }
===========美美的分割线================
注意:set_error_handler()、set_exception_handler()2个注册的回调函数均不会多次调用,即如果注册多个,以最后一个为生效回调。
通过以上3个函数注册,就可以很好的在一个你想要的地方统一接收项目里所以的错误、异常等信息,并做相应的处理,比如写log或展示友好的错误页等
相关文章推荐
- php gerr 统一的错误处理 v0
- PHP中的错误处理、异常处理机制
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
- SpringBoot基础-错误异常处理统一办法
- PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
- php错误异常处理
- PHP 错误与异常 笔记与总结(15 )使用观察者模式处理异常信息
- 统一处理jquery ajax请求过程中的异常错误信息的机制
- PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
- PHP中的错误处理、异常处理机制
- php日志错误异常处理
- PHP错误处理及异常处理笔记
- PHP中PDO错误/异常(PDOException)处理
- PHP如何抛出异常处理错误
- PHP错误和异常详解(PHP7错误处理)
- PHP 异常、错误处理 梳理
- PHP系列(七)PHP错误异常处理
- PHP 的异常处理、错误的抛出及错误回调函数
- __autoload && set_hander php的错误异常处理机制以及自动加载机制