分享一个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 is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
PHP 自定义错误处理函数trigger_error()
Mar 26 PHP
php错误级别的设置方法
Jun 17 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
如何打开php的gd2库
Feb 09 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
ThinkPHP实现分页功能
Apr 28 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 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
终于听上了直流胆调频
2021/03/02 无线电
一个用于网络的工具函数库
2006/10/09 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
PHP的PDO连接讲解
2019/01/24 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
一些javascript一些题目的解析
2010/12/25 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
python动态进度条的实现代码
2019/07/03 Python
pip安装python库的方法总结
2019/08/02 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
《与象共舞》教学反思
2014/02/24 职场文书
社会调查研究计划书
2014/05/01 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers
Redis特殊数据类型bitmap位图
2022/06/01 Redis