分享一个php 的异常处理程序


Posted in PHP onJune 22, 2014

直接上代码

<?php
//exceptionHandle.php xiecongwen 20140620
//define('DEBUG',true);
/**
* Display all errors when APPLICATION_ENV is development.
*/
if (defined('DEBUG')) {
error_reporting(E_ALL);
ini_set("display_errors", 1);
}
if(!defined('DEBUG')){
/**
* 当发生重大错误时 写日志 并友好提示用户
* (PS:只所以将代码写在这里,是因为在其他地方注册时,出现问题无法调用配置函数.待完善...)
*/
function shutdownHandler()
{
/**
* 写日志 此处直接写在根目录下shutdownlog.txt
*/
$lasterror = error_get_last();
if($lasterror){
$error = strval(date("Y-m-d h:i:s")).'=>'."[SHUTDOWN] lvl:" . $lasterror['type'] . " | msg:" . $lasterror['message'] . " | file:" . $lasterror['file'] . " | ln:" . $lasterror['line']."\n";
file_put_contents('./log/'.date("Ymd").'shutdownlog.txt',$error,FILE_APPEND);
//友好提示用户
ob_end_clean();
die('对不起,我出错了!');
}
}
register_shutdown_function('shutdownHandler');
}
if(!defined('DEBUG')){
 
function errorHandler($errno, $errstr = '', $errfile = '', $errline = 0)
{
//写日志
$exception = new \ErrorException($errstr, 0, $errno, $errfile, $errline);
$msg = strval(date("Y-m-d h:i:s")).'=>'.'Type:'.getErrTypeName($errno).' '.getMsg($exception);
file_put_contents('./log/'.date("Ymd").'error.txt',$msg,FILE_APPEND);
switch ($errno)
{
case E_NOTICE:return ;
case E_DEPRECATED:return;
}
throw $exception;
}
function getErrTypeName($errno)
{
switch ($errno)
{
case E_NOTICE:return 'E_NOTICE' ;
case E_DEPRECATED:return 'E_DEPRECATED';
default:return $errno;
}
}
function exceptionHandler($ex)
{
$msg = strval(date("Y-m-d h:i:s")).'=>'.getMsg($ex);
file_put_contents('./log/'.date("Ymd").'exception.txt',$msg,FILE_APPEND);
}
function getMsg($exception)
{
//获取最准确的异常 
while($exception->getPrevious())$exception = $exception->getPrevious();
$msg = ' Message: '.$exception->getMessage();
$msg .= ' File: '.$exception->getFile().':'.$exception->getLine()."\n";
return $msg;
}
set_error_handler('errorHandler',E_ALL);
set_exception_handler('exceptionHandler');
}
?>
PHP 相关文章推荐
php&amp;java(三)
Oct 09 PHP
php基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
php循环输出数据库内容的代码
May 24 PHP
php将时间差转换为字符串提示
Sep 07 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
Oct 26 PHP
PHP register_shutdown_function()函数的使用示例
Jun 23 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
May 21 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 #PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
Jun 22 #PHP
PHP延迟静态绑定示例分享
Jun 22 #PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
Jun 22 #PHP
解决cPanel无法安装php5.2.17
Jun 22 #PHP
destoon设置自定义搜索的方法
Jun 21 #PHP
destoon后台网站设置变成空白的解决方法
Jun 21 #PHP
You might like
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
Vuex的实战使用详解
2019/10/31 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
js实现简单进度条效果
2020/03/25 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
使用python实现rsa算法代码
2016/02/17 Python
深入理解Python3中的http.client模块
2017/03/29 Python
python使用turtle库绘制时钟
2020/03/25 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
python实现数字炸弹游戏
2020/07/17 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
刚毕业大学生自荐信范文
2014/02/20 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
五年级作文之成长
2019/09/16 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL