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

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

<?php
class myErrorHandler{
    //$message:错误信息
    //$filename:错误文件名
    //$line:错误行号
    //$vars:额外信息
    public $message = ‘‘;
    public $filename = ‘‘;
    public $line = 0;
    public $vars = array();
    protected $_noticeLog = ‘D:\practise\php\From\notice\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->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, ‘[email protected]‘); //1:管理员,发送给管理员
        exit(1);//以错误代码形式来终止
    }

    //处理警告
    public function dealWarning(){
        $errorMsg = <<<EOF
            出现了警告错误,如下:
            产生警告的文件:{$this->filename}
            产生警告的信息:{$this->message}
            产生警告的行号:{$this->line}
            追踪信息:{$backtrace};
EOF;
    return error_log($errorMsg, 1, ‘[email protected]‘);
    }

    //处理通知
    public function dealNotic(){
        $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);
    }
}
时间: 2024-12-24 16:19:14

PHP 错误与异常 笔记与总结(9)自定义错误处理器的相关文章

PHP 错误与异常 笔记与总结(10)错误处理器测试

关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorHandler.php'; error_reporting(-1); set_error_handler(array('myErrorHandler', 'deal')); //通知级别错误 echo $notice; 运行,在 D:\practise\php\From\notice 生成 noticeLo

服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止

原文:服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止 误设置禁止远程查看应用程序错误的详细信息(出于安全原因). 之前自己也碰到過這種情況.特此整理,希望能夠幫助有困惑的挨踢人士~ 说明: 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止查看应用程序错误的详细信息. 详细信息: 若要使他人能够从本地服务器计算机上查看此特定错误信息的详细信息,请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记.然后应将

PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误

有两种方式可以在 PHP 中以异常的方式处理错误: ① PHP 内置的 ErrorException类(也是 Exception 类的子类) 1 <?php 2 function exception_error_handler($errno, $errstr, $errfile, $errline){ 3 throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 4 } 5 6 set_error_handler('exc

PHP 错误与异常 笔记与总结(8)自定义错误处理函数 set_error_handler()

通过 Set_error_handler() 函数设置用户自定义的错误处理函数. 步骤: ① 创建错误处理函数 ② 设置不同级别调用函数 ③ Set_error_handler() 函数制定接管错误处理—— 如果使用了该函数,程序会绕过标准的 PHP 错误处理. 摘自:php.net mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) 设置一个用户的函数(erro

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

可以使用自定义异常处理器来处理所有未捕获的异常(没有用 try/catch 捕获的异常). set_exception_handler():设置一个用户定义的异常处理函数,当一个未捕获的异常发生时所调用函数的名称(回调函数),该函数必须在调用 set_exception_handler() 之前已经定义.该处理函数需要接受一个参数,该参数是一个抛出的异常对象 [例] 1 <?php 2 header('content-type:text/html; charset=utf-8'); 3 head

PHP 错误与异常 笔记与总结(7)将错误日志以邮件方式发送

当系统发生了很严重的问题,需要立刻发送给管理员.可以通过 error_log() 将错误以邮件形式发送到邮箱. 在 php.ini 中设置: sendmail_from = [email protected] 然后设置: sendmail_path = "G:\sendmail\sendmail.exe -t" 其中:G:\sendmail\sendmail.exe 是邮件客户端的地址. 代码: <?php //关闭错误显示 ini_set('display_errors', 0

PHP学习笔记三十三【自定义错误处理器】

<?php //自定义错误处理器 //$errorno 错误号 //$errmes错误信息 //这两个参数是必须的 function my_error($errorno,$errmes) { echo "<font size='5' color='red'>$errorno</font><br/>"; echo "错误信息是:$errmes"; } //必须重写set_error_handler处理器 set_error_h

PHP 错误与异常 笔记与总结(14 )记录和发送异常信息

当发生异常时,把异常信息记录到日志文件中: 1 <?php 2 header('content-type:text/html; charset=utf-8'); 3 class LogException extends Exception{ 4 public function __construct($message = null, $code = 0){ 5 parent::__construct($message, $code); 6 error_log($this->getMessage

PHP 错误与异常 笔记与总结(18 )页面重定向实现

在发生错误时,将用户重定向到另一个页面. 1 <?php 2 header('content-type:text/html; charset=utf-8'); 3 4 class ExceptionRedirectHandler{ 5 6 protected $_exception; 7 protected $redirect = '404.html'; 8 protected $_logFile = 'D:/practise/php/Error/LogException3.log'; 9 10