• 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']." ";
    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()." ";
    return $msg;
    }

    set_error_handler('errorHandler',E_ALL);
    set_exception_handler('exceptionHandler');

    }

    ?>

  • 相关阅读:
    2016年开源软件评选(截图备份)
    牛逼的思维方式都是倒逼出来的(摘)
    3-22 多态
    3 -20 类
    3 -19标准库
    3 -16 json序列化
    3 -16 内置方法
    迭代对象 和 迭代器
    3 -14 迭代 和列表 生成器
    3-13 装饰器
  • 原文地址:https://www.cnblogs.com/xcwytu/p/3801222.html
Copyright © 2020-2023  润新知