<?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: " . 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();