美文网首页
[PHP错误异常]⑥--自定义错误处理器

[PHP错误异常]⑥--自定义错误处理器

作者: 子木同 | 来源:发表于2017-09-14 15:08 被阅读6次

MyErrorHandler.php

<?php

class MyErrorHandler
{
    public $message = '';
    public $filename = '';
    public $line = 0;
    public $var = array();
    protected $_noticeLog = 'D:\error\noticeLog.log';

    public function __construct($message, $filename, $line, $vars)
    {
        $this->message = $message;
        $this->filename = $filename;
        $this->line = $line;
        $this->vars = $vars;
    }

    public static function deal($errno, $errmsg, $filename, $line, $vars)
    {
        $self = new self($errmsg, $filename, $line, $vars);
        switch ($errno) {
            case E_USER_ERROR:
                return $self->dealError();
                break;
            case E_USER_WARNING:
            case E_WARNING:
                return $self->dealWaining();
                break;
            case E_NOTICE:
            case E_USER_NOTICE:
                return $self->dealNotice();
                break;
            default:
                return false;
        }
    }

    /**
     * 如何处理致命错误
     */
    public function dealError()
    {
        ob_start();//打开输出缓冲区,所有的输出信息不在直接发送到浏览器
        debug_print_backtrace();//打印 PHP回溯
        $backtrace = ob_get_flush();
        $errorMsg = <<<EOF
        出现了致命错误,如下:
        产生错误的文件:{$this->filename}
        产生错误的信息:{$this->message}
        产生错误的行号:{$this->line}
        追踪信息:{$backtrace}
EOF;
        error_log($errorMsg, 1, '403133112@qq.com');
        exit(1);
    }

    /**
     * 如何处理警告
     */
    public function dealWarning()
    {
        $errorMsg = <<<EOF
        出现了警告错误,如下
        产生警告的文件:{$this->filename}
        产生警告的信息:{$this->message}
        产生警告的行号:{$this->line}
EOF;
        return error_log($errorMsg, 1, '403133112@qq.com');
    }

    /**
     * 如何处理通知级别的错误
     */
    public function dealNotice()
    {
        $dateTime = date("Y-m-d H:i:s", time());
        $errorMsg = <<<EOF
        出现了通知错误,如下:
        产生通知的文件:{$this->filename}
        产生通知的信息:{$this->message}
        产生通知的行号:{$this->line}
        产生通知的时间:{$dateTime}
EOF;
        return error_log($errorMsg, 3, $this->_noticeLog);
    }
}
?>

test.php

<?php
header('content-type:text/html:charset=utf-8');
require_once 'MyErr orHandler.php';
error_reporting(-1);
ini_set('display_errors', 0);
set_error_handler(array('MyErrorHandler', 'deal'));

echo $test;
//settype($var, 'king');
//test();
trigger_error('我是手动抛出的致命错误', E_USER_ERROR);//邮件接收

echo "this is a test";//无执行
?>

相关文章

网友评论

      本文标题:[PHP错误异常]⑥--自定义错误处理器

      本文链接:https://www.haomeiwen.com/subject/qmrdsxtx.html