zoukankan      html  css  js  c++  java
  • 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); 
        }
    }
  • 相关阅读:
    42. Trapping Rain Water
    223. Rectangle Area
    645. Set Mismatch
    541. Reverse String II
    675. Cut Off Trees for Golf Event
    安装 VsCode 插件安装以及配置
    向上取整 向下取整 四舍五入 产生100以内随机数
    JS 判断是否为数字 数字型特殊值
    移动端初始配置,兼容不同浏览器的渲染内核
    Flex移动布局中单行和双行布局的区别以及使用
  • 原文地址:https://www.cnblogs.com/dee0912/p/4537369.html
Copyright © 2011-2022 走看看