分享一个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 相关文章推荐
基于mysql的论坛(5)
Oct 09 PHP
PHP入门学习的几个不错的实例代码
Jul 13 PHP
php判断变量类型常用方法
Apr 24 PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
修改apache配置文件去除thinkphp url中的index.php
Jan 17 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
PHP版微信公众平台红包API
Apr 02 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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获取mysql数据库中的所有表名的代码
2011/04/23 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
PHP实现百度人脸识别
2019/05/06 PHP
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
解决Python的str强转int时遇到的问题
2018/04/09 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
django 环境变量配置过程详解
2019/08/06 Python
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
Solaris操作系统的线程机制
2015/07/28 面试题
蔬菜基地的创业计划书
2014/01/06 职场文书
服务之星事迹材料
2014/05/03 职场文书
物业管理工作方案
2014/05/10 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
java实现web实时消息推送的七种方案
2022/07/23 Java/Android