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


Posted in PHP onJune 20, 2017

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
php 多个submit提交表单 处理方法
Jul 07 PHP
php foreach、while性能比较
Oct 15 PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
有关PHP性能优化的介绍
Jun 20 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
实用的简单PHP分页集合包括使用方法
Oct 21 PHP
YII中assets的使用示例
Jul 31 PHP
thinkphp5使用无限极分类
Feb 18 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 #PHP
php实现的双色球算法示例
Jun 20 #PHP
php实现的二分查找算法示例
Jun 20 #PHP
创建无限极分类树型结构的简单方法
Jun 20 #PHP
PHP实现的简单排列组合算法应用示例
Jun 20 #PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 #PHP
PHP中模糊查询并关联三个select框
Jun 19 #PHP
You might like
php调用mysql数据 dbclass类
2011/05/07 PHP
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
内刊编辑求职自荐书范文
2014/02/19 职场文书
征兵宣传标语
2014/06/20 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
看上去很美观后感
2015/06/10 职场文书
新娘婚礼致辞
2015/07/27 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
Ruby处理YAML和json数据
2022/04/18 Ruby
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL