分享一个php 的异常处理程序

 更新时间:2014年06月22日 11:01:21   投稿:hebedich  
给大家分享一个php的异常处理程序,功能很简单当发生重大错误时,写日志并友好提示用户,用处却很大,对不对

直接上代码

<?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');
}
?>

相关文章

  • Laravel实现自定义错误输出内容的方法

    Laravel实现自定义错误输出内容的方法

    这篇文章主要介绍了Laravel实现自定义错误输出内容的方法,结合实例形式分析了Laravel自定义错误输出信息的相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • php将html转为图片的实现方法

    php将html转为图片的实现方法

    下面小编就为大家带来一篇php将html转为图片的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • thinkphp5实现微信扫码支付

    thinkphp5实现微信扫码支付

    这篇文章主要为大家详细介绍了thinkphp5实现微信扫码支付,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 使用Composer安装Yii框架的方法

    使用Composer安装Yii框架的方法

    这篇文章主要介绍了使用Composer安装Yii框架的方法,结合具体实例分析了Composer的相关使用技巧,需要的朋友可以参考下
    2016-03-03
  • php按百分比生成缩略图的代码分享

    php按百分比生成缩略图的代码分享

    最近的一个网站项目中上传图片需要生成缩略图,以减小列表页的大小,减缓服务器压力。一向崇尚简洁明了和实用的我,看到网上搜到的一个个长长的php缩略图类的时候,感到非常痛苦。我承认他们写的功能是强大一些,但是我不需要这么复杂的功能
    2014-05-05
  • php下实现农历日历的代码

    php下实现农历日历的代码

    php下实现农历日历的代码...
    2007-03-03
  • Laravel ORM 数据model操作教程

    Laravel ORM 数据model操作教程

    今天小编就为大家分享一篇Laravel ORM 数据model操作教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • tp5框架的增删改查操作示例

    tp5框架的增删改查操作示例

    这篇文章主要介绍了tp5框架的增删改查操作,结合实例形式分析了thinkPHP5框架数据库连接及增删改查相关操作的控制器与视图使用技巧,需要的朋友可以参考下
    2019-10-10
  • Codeigniter的dom类用法实例

    Codeigniter的dom类用法实例

    这篇文章主要介绍了Codeigniter的dom类用法,实例分析了基于Codeigniter的dom操作技巧,需要的朋友可以参考下
    2015-06-06
  • PHP生成迅雷、快车、旋风等软件的下载链接代码实例

    PHP生成迅雷、快车、旋风等软件的下载链接代码实例

    这篇文章主要介绍了PHP生成迅雷、快车、旋风等软件的下载链接实例,需要的朋友可以参考下
    2014-05-05

最新评论