php错误消息捕获

<?php
header('Content-type:text/html;charset=UTF-8');
//function_exists('ini_set') && ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
register_shutdown_function(array('debug', 'shutdown_handler'));

//function_exists('ini_set') && ini_set('display_errors', 'On');
set_error_handler(array('debug', 'error_handler')); // 设置错误处理方法
set_exception_handler(array('debug', 'exception_handler')); // 设置异常处理方法

class debug{
    public static function shutdown_handler() {
        if($e = error_get_last()) {
            ob_clean();
            echo "Shutdown: \n" . print_r($e);
        }
    }

    public static function error_handler($errno, $errstr, $errfile, $errline) {
        defined('E_DEPRECATED') || define('E_DEPRECATED', 8192);
        defined('E_USER_DEPRECATED') || define('E_USER_DEPRECATED', 16384);

        $error_type = array(
            E_ERROR                 => '运行错误',
            E_WARNING               => '运行警告',
            E_PARSE                 => '语法错误',
            E_NOTICE                => '运行通知',
            E_CORE_ERROR            => '初始错误',
            E_CORE_WARNING          => '初始警告',
            E_COMPILE_ERROR         => '编译错误',
            E_COMPILE_WARNING       => '编译警告',
            E_USER_ERROR            => '用户定义的错误',
            E_USER_WARNING          => '用户定义的警告',
            E_USER_NOTICE           => '用户定义的通知',
            E_STRICT                => '代码标准建议',
            E_RECOVERABLE_ERROR     => '致命错误',
            E_DEPRECATED            => '代码警告',
            E_USER_DEPRECATED       => '用户定义的代码警告',
        );

        $errno_str = isset($error_type[$errno]) ? $error_type[$errno] : '未知错误';
        $s = "[$errno_str] : $errstr";
        if(true) {
            throw new Exception($s);
        }else{
            // 线上模式放宽一些,只记录日志,不中断程序执行
            if(in_array($errno, array(E_NOTICE, E_USER_NOTICE, E_DEPRECATED))) {
                // log::write($s);
            }else{
                throw new Exception($s);
            }
        }
    }

    public static function exception_handler($e) {
        $trace = $e->getTrace();
        if(!empty($trace) && $trace[0]['function'] == 'error_handler' && $trace[0]['class'] == 'debug') {
            $message = $e->getMessage();
            $file = $trace[0]['args'][2];
            $line = $trace[0]['args'][3];
        }else{
            $message = '[程序异常] : '.$e->getMessage();
            $file = $e->getFile();
            $line = $e->getLine();
        }
        
        var_dump($message);
    }
}

echo $d;
echo ed();
更多相关文章
一周排行
  • Coreos操作系统
    linux大规模服务器部署---前言1.一个最小的操作系统(A Minimal Opera ...
  • 三位一体的漏洞分析方法-web应用安全测试方法
    本文转自乌云知识库 0x00 前言 节选自: http://www.owasp.org.c ...
  • 一.radio根据值默认选中 $(":radio[name=is_photo][value="+data.is_photo+"]").prop("checked&qu ...
  • 因为现在本人比较懒惰,就随手做些视频,希望大家不要笑话俺: 仅供新手参考,老鸟飞过: 实验环境:3台虚拟机 Web1   Web2   Client IP:Web1公用:192.168.2.1专用:172.16.2. ...
  •   在比较了几款CODE REVIEW的工具之后,决定部署一个Reviewboard.基于PYTHON的环境在WINDOWS下配置是相当的麻烦.在照着文档把每一步做完之后,发现站点还是不能访问.查看apache的日志 ...
  • 这些资料基本都是英文,不过整理一下,方便深入研究的朋友.下面的链接,估计不翻墙,基本是看不到.网站肯定是可以访问的.改天把这些资料放到国内的网盘上,给大家下载.Openstack最好的资料肯定是英文,推荐几个blog ...
  • 手机访问php环境移动端静态页面
    痛点 在做一个移动端H5页面,手机要调试访问,不方便.就想说能不能手机连接电脑的php项目 ...
  • 1.引用reference引用用在的地方:(1)作用于函数参数(2)作用于函数返回类型.对于第一种,很容易理解,就是对函数实参变量的引用(及实参的别名):但对于第二种,作为返回类型时,情况就不大明显,至少本人是这样认 ...
  • According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellular autom ...
  • Tableau在斯坦福大学中诞生,基于众多博士的奇思妙想最终实现,它正逐渐成为优秀的数据分析工具之一,可以生动地分析实际存在的任何结构化数据,以在几分钟内生成美观的图表.坐标图.仪表盘与报告.利用 Tableau 简 ...