php 返回致命错误,捕获PHP致命错误

我开发了一种方法来捕获PHP中的所有错误类型(几乎全部)!我不知道E-core-u错误(我认为它不会适用于那个错误)!但是,对于其他致命错误(e_错误、e_解析、e_编译…)只使用一个错误处理函数就可以正常工作!我的解决方案是:

将以下代码放到主文件(index.php)上:

define('E_FATAL', E_ERROR | E_USER_ERROR | E_PARSE | E_CORE_ERROR |

E_COMPILE_ERROR | E_RECOVERABLE_ERROR);

define('ENV', 'dev');

//Custom error handling vars

define('DISPLAY_ERRORS', TRUE);

define('ERROR_REPORTING', E_ALL | E_STRICT);

define('LOG_ERRORS', TRUE);

register_shutdown_function('shut');

set_error_handler('handler');

//Function to catch no user error handler function errors...

function shut(){

$error = error_get_last();

if($error && ($error['type'] & E_FATAL)){

handler($error['type'], $error['message'], $error['file'], $error['line']);

}

}

function handler( $errno, $errstr, $errfile, $errline ) {

switch ($errno){

case E_ERROR: // 1 //

$typestr = 'E_ERROR'; break;

case E_WARNING: // 2 //

$typestr = 'E_WARNING'; break;

case E_PARSE: // 4 //

$typestr = 'E_PARSE'; break;

case E_NOTICE: // 8 //

$typestr = 'E_NOTICE'; break;

case E_CORE_ERROR: // 16 //

$typestr = 'E_CORE_ERROR'; break;

case E_CORE_WARNING: // 32 //

$typestr = 'E_CORE_WARNING'; break;

case E_COMPILE_ERROR: // 64 //

$typestr = 'E_COMPILE_ERROR'; break;

case E_CORE_WARNING: // 128 //

$typestr = 'E_COMPILE_WARNING'; break;

case E_USER_ERROR: // 256 //

$typestr = 'E_USER_ERROR'; break;

case E_USER_WARNING: // 512 //

$typestr = 'E_USER_WARNING'; break;

case E_USER_NOTICE: // 1024 //

$typestr = 'E_USER_NOTICE'; break;

case E_STRICT: // 2048 //

$typestr = 'E_STRICT'; break;

case E_RECOVERABLE_ERROR: // 4096 //

$typestr = 'E_RECOVERABLE_ERROR'; break;

case E_DEPRECATED: // 8192 //

$typestr = 'E_DEPRECATED'; break;

case E_USER_DEPRECATED: // 16384 //

$typestr = 'E_USER_DEPRECATED'; break;

}

$message = ''.$typestr.': '.$errstr.' in '.$errfile.' on line '.$errline.'
';

if(($errno & E_FATAL) && ENV === 'production'){

header('Location: 500.html');

header('Status: 500 Internal Server Error');

}

if(!($errno & ERROR_REPORTING))

return;

if(DISPLAY_ERRORS)

printf('%s', $message);

//Logging error on php file error log...

if(LOG_ERRORS)

error_log(strip_tags($message), 0);

}

ob_start();

@include 'content.php';

ob_end_flush();

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值