php异常结束,PHP错误及异常统一处理

php中错误及异常的统一收集并处理,主要就是用到3个内部方法:

1. register_shutdown_function(callable $callback [, mixed $parameter [, mixed $... ]) //php程序执行完成后执行的函数

它执行机制是:当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候它是从内存中调用,不是从PHP页面中调用,所以在此回调函数中不能使用相对路径。以下情况时会触发此函数执行:

1)当页面被用户强制停止时

2)当程序代码运行超时时

3)当PHP代码执行完成时,代码执行存在异常和错误、警告

在错误收集的使用上,需配合php另一个错误收集函数来实现:error_get_last(),代码如:

register_shutdown_function('ExceptionHandle::fatalError');

//也可以对象方式调用

$a = new ExceptionHandle();

register_shutdown_function([$a,'fatalError']);

class ExceptionHandle {

// 致命错误捕获

static public function fatalError() {

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();

//此处添加业务逻辑,如记录log或展示错误页面等

break;

}

}

}

}

另外,需要注意:

1)它可以被多次调用,这些被注册的回调会按照他们注册时的顺序被依次调用

2)当程序由于 exit 、die和未处理的异常、错误结束时,不会触发该函数--此种情况,所以需要后面2个错误/异常函数来捕捉

3)PHP4后支持注册函数参数传递

2. set_error_handler(array(‘Debug’,'appError’)); //设置一个用户定义的错误处理函数

class ExceptionHandle {

/**

* 自定义错误处理

* @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:

ob_end_clean();

$errorStr['errno'] = $errno;

$errorStr['message'] = $errstr;

$errorStr['file'] = $errfile;

$errorStr['line'] = $errline;

//添加实际错误处理逻辑

break;

default:

//其他非致命类型错误只记录log,防止对页面影响

break;

}

}

}

3. set_exception_handler(array(‘Debug’,'appException’)); //自定义异常处理。

class ExceptionHandle {

/**

* 自定义异常处理

* @access public

* @param mixed $e 异常对象

*/

static public function appException($e) {

$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();

//添加实际异常处理逻辑

}

}

===========美美的分割线================

注意:set_error_handler()、set_exception_handler()2个注册的回调函数均不会多次调用,即如果注册多个,以最后一个为生效回调。

通过以上3个函数注册,就可以很好的在一个你想要的地方统一接收项目里所以的错误、异常等信息,并做相应的处理,比如写log或展示友好的错误页等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值