分享一个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入门学习的几个不错的实例代码
Jul 13 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
php加密解密实用类分享
Jan 07 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
php使用百度天气接口示例
Apr 22 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
PHP可变变量学习小结
Nov 29 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
PHP实现JS中escape与unescape的方法
Jul 11 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
Sep 23 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 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下实现农历日历的代码
2007/03/07 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
如何用js控制css中的float的代码
2007/08/16 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
对Python 语音识别框架详解
2018/12/24 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
numba提升python运行速度的实例方法
2021/01/25 Python
车间班组长的职责
2013/12/13 职场文书
2014年消防工作实施方案
2014/02/20 职场文书
2019个人半年工作总结
2019/06/21 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
解析Redis Cluster原理
2021/06/21 Redis
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers