分享一个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作的文本留言本的例子(二)
Oct 09 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
解析在apache里面给php写虚拟目录的详细方法
Jun 24 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
php 可变函数使用小结
Jun 12 PHP
php微信开发之图片回复功能
Jun 14 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
php解析非标准json、非规范json的方式实例
Dec 10 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框架codeigniter中如何使用框架的session
2013/06/24 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
深入理解Python对Json的解析
2017/02/14 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
Python中关于浮点数的冷知识
2019/09/22 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
机电一体化专业应届本科生求职信
2013/09/27 职场文书
干部行政关系介绍信
2014/01/17 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
护士自我推荐信范文
2015/03/24 职场文书
周一给客户的问候语
2015/11/10 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书