分享一个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无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
php中动态调用函数的方法
Mar 16 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 PHP
Laravel框架实现文件上传的方法分析
Sep 29 PHP
laravel通用化的CURD的实现
Dec 13 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 PHP
浅析PHP echo 和 print 语句
Jun 30 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
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
常用PHP封装分页工具类
2017/01/14 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
php微信开发之关注事件
2018/06/14 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
配置管理计划的主要内容有哪些
2014/06/20 面试题
关于学习的决心书
2015/02/05 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
2016小学新学期寄语
2015/12/04 职场文书
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js