PHP各种异常和错误的拦截方法及发生致命错误时(3)

在错误拦截类中,需要用户自己定义实现错误记录的方法('logException'),这个地方需要注意,有些错误可能在一段时间内不断发生,因此只需记录一次即可,你可以使用错误代码、文件、行号、错误详情 生成一个MD5值用于记录该错误是否已经被记录,如果在规定时间内(一个小时)已经被记录过则不需要再进行记录

然后我们定义一个文件,用于实例化以上类,捕获各种错误、异常,该文件命名为'registerErrorHandler.php', 内如如下

/* * 使用方法介绍: * 在入口处引入该文件即可,然后可以在该文件中定义调试模式常量'DEBUG_ERROR' * * <?php * * require 'registerErrorHandler.php'; * * ?> */ /** * 调试错误模式: * 0 => 非调试模式,不显示异常、错误信息但记录异常、错误信息 * 1 => 调试模式,显示异常、错误信息但不记录异常、错误信息 */ define('DEBUG_ERROR', 0); require 'errorHandler.class.php'; class registerErrorHandler { /** * 方 法:注册异常、错误拦截 * 参 数:void * 返 回:void */ public static function register() { global $argv; if(DEBUG_ERROR) {//如果开启调试模式 ini_set('display_errors', 1); return; } //如果不开启调试模式 ini_set('error_reporting', -1); ini_set('display_errors', 0); $handler = new errorHandler(); $handler->argvs = $argv;//此处主要兼容命令行模式下获取参数 $handler->register(); } } registerErrorHandler::register();

剩下的就是需要你在你的入口文件引入该文件,定义调试模式,然后实现你自己记录错误的方法即可

需要注意的是,有些错误在你进行注册之前已经发生并且导致脚本中断是无法记录下来的,因为此时'registerErrorHandler::register()' 尚未执行已经中断了

还有就是'set_error_handler'这个函数不能捕获下面类型的错误 E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、E_COMPILE_ERROR、 E_COMPILE_WARNING, 这个可以在官方文档中看到,但是本处无妨,因为以上错误是解析、编译错误,这些都没有通过,你是不可能发布上线的

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d7f25ef7fc97a30c2d6fa53a83cb9b65.html