分享一个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 相关文章推荐
程序员编程十条戒律
Jul 09 PHP
PHP 模拟$_PUT实现代码
Mar 15 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
Sep 13 PHP
PHP语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
php中namespace use用法实例分析
Jan 22 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
通过PHP设置BugFree获取邮箱通知
Apr 25 PHP
PHP实现统计代码行数小工具
Sep 19 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
我的论坛源代码(三)
2006/10/09 PHP
php 远程关机操作的代码
2008/12/05 PHP
php引用传值实例详解学习
2013/11/06 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
php服务器的系统详解
2019/10/12 PHP
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python字符串连接方式汇总
2014/08/21 Python
python获取目录下所有文件的方法
2015/06/01 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
python实现学生信息管理系统源码
2021/02/22 Python
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
程序员机试试题汇总
2012/03/07 面试题
出国导师推荐信
2014/01/16 职场文书
入党自荐书范文
2014/03/09 职场文书
个人合作协议书范本
2014/04/18 职场文书
班主任工作总结范文
2015/08/13 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python