• PHP 错误与异常 笔记与总结(9)自定义错误处理器


    自定义错误处理器更加智能。

    <?php
    class myErrorHandler{
        //$message:错误信息
        //$filename:错误文件名
        //$line:错误行号
        //$vars:额外信息    
        public $message = '';
        public $filename = '';
        public $line = 0;
        public $vars = array();
        protected $_noticeLog = 'D:practisephpFrom
    otice
    oticeLog.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->dealWarning();
                    break;
                case E_NOTICE:
                case E_USER_NOTICE:
                    return $self->dealNotice();
                    break;
                default:
                    return false; //使用内置错误处理程序
            }
        }
    
        //处理致命错误
        public function  dealError(){
            //开启内存缓存
            ob_start();
            //打印一条PHP回溯
            debug_print_backtrace();
            $backtrace = ob_get_flush();
            $errorMsg = <<<EOF
                出现了致命错误,如下:
                产生错误的文件:{$this->filename}
                产生错误的信息:{$this->message}
                产生错误的行号:{$this->line}
                追踪信息:{$backtrace};        
    EOF;
            error_log($errorMsg, 1, '472323087@qq.com'); //1:管理员,发送给管理员
            exit(1);//以错误代码形式来终止
        }
    
        //处理警告
        public function dealWarning(){
            $errorMsg = <<<EOF
                出现了警告错误,如下:
                产生警告的文件:{$this->filename}
                产生警告的信息:{$this->message}
                产生警告的行号:{$this->line}
                追踪信息:{$backtrace};        
    EOF;
        return error_log($errorMsg, 1, '472323087@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); 
        }
    }
  • 相关阅读:
    Profibus 接线
    如何正确使用Profibus插头以及终端电阻
    Java设计模式(3)——抽象工厂模式
    Java设计模式(2)——工厂方法模式
    Java设计模式(1)——简单工厂模式
    Oracle——控制事务
    Jackson-将对象转为Json字符串
    $.ajax
    Ajax——jQuery实现
    Ajax——三种数据传输格式
  • 原文地址:https://www.cnblogs.com/dee0912/p/4537369.html
Copyright © 2020-2023  润新知