分享一个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 和 MYSQL
Oct 09 PHP
如何隐藏你的.php文件
Jan 04 PHP
PHP添加MySQL数据记录代码
Jun 07 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
教大家制作简单的php日历
Nov 17 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
zend framework重定向方法小结
May 28 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
php 无限分类 树形数据格式化代码
Oct 11 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
详解PHP swoole process的使用方法
Aug 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 上传文件大小限制
2009/07/05 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
vue实现移动端图片上传功能
2019/12/23 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
python属于软件吗
2020/06/18 Python
浅析Python中字符串的intern机制
2020/10/03 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
机械工程师的岗位职责
2013/11/17 职场文书
学生期末评语大全
2014/04/30 职场文书
现场活动策划方案
2014/08/22 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python