register_shutdown_function('lib\Error::fatalError');
set_error_handler('lib\Error::appError');
set_exception_handler('lib\Error::appException');
<?php
namespace lib;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/4/30 0030
* Time: 15:43
*/
class Error
{
/**
* 自定义异常处理
* @access public
* @param mixed $e 异常对象
*/
static public function appException($e)
{
echo 4444;
$error = array();
$error['message'] = $e->getMessage();
$trace = $e->getTrace();
if ('E' == $trace[0]['function']) {
$error['file'] = $trace[0]['file'];
$error['line'] = $trace[0]['line'];
} else {
$error['file'] = $e->getFile();
$error['line'] = $e->getLine();
}
$error['trace'] = $e->getTraceAsString();
// 发送404信息
header('HTTP/1.1 404 Not Found');
header('Status:404 Not Found');
self::halt($error);
}
/**
* 自定义错误处理
* @access public
* @param int $errno 错误类型
* @param string $errstr 错误信息
* @param string $errfile 错误文件
* @param int $errline 错误行数
* @return void
*/
static public function appError($errno, $errstr, $errfile, $errline)
{
switch ($errno) {
case E_ERROR:
case E_PARSE:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
echo $errno;
echo '-----------';
ob_end_clean();
$errorStr = "$errstr " . $errfile . " 第 $errline 行.";
self::halt($errorStr);
break;
default:
$errorStr = "[$errno] $errstr " . $errfile . " 第 $errline 行.";
break;
}
}
// 致命错误捕获
static public function fatalError()
{
echo 555;
if ($e = error_get_last()) {
switch ($e['type']) {
case E_ERROR:
case E_PARSE:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
ob_end_clean();
self::halt($e);
break;
}
}
}
/**
* 错误输出
* @param mixed $error 错误
* @return void
*/
static public function halt($error)
{
echo 22;
$e = array();
if (APP_DEBUG) {
//调试模式下输出错误信息
if (!is_array($error)) {
$trace = debug_backtrace();
$e['message'] = $error;
$e['file'] = $trace[0]['file'];
$e['line'] = $trace[0]['line'];
ob_start();
debug_print_backtrace();
$e['trace'] = ob_get_clean();
} else {
$e = $error;
}
exit( $e['message'] . PHP_EOL . 'FILE: ' . $e['file'] . '(' . $e['line'] . ')' . PHP_EOL . $e['trace']);
} else {
echo json_encode(array('code' => 0, 'msg' => 'cheng'));
}
exit;
}
}