php教程

超轻量级php框架startmvc

php实现的错误处理封装类实例

更新时间:2020-03-21 08:26:39 作者:startmvc
本文实例讲述了php实现的错误处理封装类。分享给大家供大家参考,具体如下:1、创建MyErr

本文实例讲述了php实现的错误处理封装类。分享给大家供大家参考,具体如下:

1、创建MyErrorHandler.php文件

代码如下:


<?php
class MyErrorHandler {
 public $message;
 public $filename;
 public $line;
 public $vars = array();
 protected $_noticeLog = 'F:\root\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($errno,$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();
 default:
 return false;
 }
 }
 /**
 * 致命的错误
 */
 public function dealError() {
 ob_start();
 debug_print_backtrace();
 $backtrace = ob_get_flush();
 $errorMsg = <<<EOF
出现了致命的错误,如下:
产生错误的文件:{$this->filename}
产生错误的信息:{$this->message}
产生错误的行号:{$this->line}
追踪信息{$backtrace}
EOF;
 error_log($errorMsg,1,'279921301@qq.com','From:php[error错误日志]');
 exit(1);
 }
 /**
 * 警告的错误
 */
 public function dealWarning() {
 $errorMsg = <<<EOF
出现了警告的错误,如下:
产生警告的文件:{$this->filename}
产生警告的信息:{$this->message}
产生警告的行号:{$this->line}
EOF;
 return error_log($errorMsg,1,'279921301@qq.com','From:php[error警告日志]');
 }
 /**
 * 通知的错误
 */
 public function dealNotice() {
 $datetime = date('Y-m-d H:i:s');
 $errorMsg = <<<EOF
出现了通知的错误,如下:
产生通知的文件:{$this->filename}
产生通知的信息:{$this->message}
产生通知的行号:{$this->line}
产生通知的时间:{$datetime}
EOF;
 return error_log($errorMsg,3,$this->_noticeLog);
 }
}

2、测试代码


<?php
include "MyErrorHandler.php";
//报告所有 PHP 错误
error_reporting(-1);
//不显示错误信息
ini_set('display_errors',0);
set_error_handler(array('MyErrorHandler','deal'));
echo $test; //Notice错误
settype($var,'test'); //警告错误
test();

注意:发送邮件需要在本地配置mail函数,可以参考前文《PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法》。

php 错误处理 封装类