分享一个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 相关文章推荐
JAVA/JSP学习系列之七
Oct 09 PHP
xajax写的留言本
Nov 25 PHP
php入门小知识
Mar 24 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
PHP中配置IIS7实现基本身份验证的方法
Sep 24 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Mar 29 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解析RSS的方法
2015/03/05 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
利用javascript查看html源文件
2006/11/08 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
Django进阶之CSRF的解决
2018/08/01 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
如何利用python进行时间序列分析
2020/08/04 Python
通过代码实例了解Python异常本质
2020/09/16 Python
python 基于opencv去除图片阴影
2021/01/26 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
一个精品风格的世界:Atterley
2019/05/01 全球购物
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
《跨越百年的美丽》教学反思
2014/02/11 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
商业街策划方案
2014/05/31 职场文书
企业金融服务方案
2014/06/03 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python