分享一个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 5.3.0 安装分析心得
Aug 07 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
php对大文件进行读取操作的实现代码
Jan 23 PHP
php中header设置常见文件类型的content-type
Jun 23 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
CI框架常用方法小结
May 17 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
PHP中快速生成随机密码的几种方式
Apr 17 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 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 Imagick获取图片RGB颜色值
2014/07/28 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
用原生js做单页应用
2017/01/17 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
浅谈mint-ui 填坑之路
2017/11/06 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python中函数参数调用方式分析
2018/08/09 Python
python内置数据类型之列表操作
2018/11/12 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
JavaScript的function函数详细介绍
2021/11/20 Javascript
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js
Java Spring Lifecycle的使用
2022/05/06 Java/Android