CodeIgniter3.0+框架自定义异常处理的方法介绍

CodeIgniter3.0+框架自定义异常处理的方法介绍

内容导读

收集整理的这篇技术教程文章主要介绍了CodeIgniter3.0+框架自定义异常处理的方法介绍,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3844字,纯文字阅读大概需要6分钟

内容图文

本篇文章给大家带来的内容是关于CodeIgniter3.0+框架自定义异常处理的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

背景:ci3.0框架核心代码自动实现了异常,并实现了抛出的对应页面和方法,对于一些个性化需求特别是接口类型的应用,会不合适。因此需要在不改版核心代码 (system目录下文件),来改变对异常及404等相关异常的处理。

方法说明

ci框架3.0比2.0有比较大的改动,其中之一就是对异常的处理。以下是CodeIgniter-3.1.8systemcoreCodeIgniter.php 中对异常处理的部分代码

/* * ------------------------------------------------------ *
Define a custom error handler so we can log PHP errors * ------------------------------------------------------ */

set_error_handler('_error_handler');

set_exception_handler('_exception_handler');

register_shutdown_function('_shutdown_handler');...

以上括号内的方法均在common.php中以function_exists为前提声明。

...if ( ! function_exists('_exception_handler')){...

代码实现

我们简单粗暴的在项目入口文件index.php中重写以下方法

/** * 推送到redis 异常队列 * @time 2019/3/21 15:29 * @author
* @param $msg * @return bool|int|string */function redis_list_add($msg){

ini_set('default_socket_timeout', -1);

$v = explode(':', $_SERVER['SITE_REDIS_SERVER']);

if (is_array($v) && !empty($v)) {



try {





$redis = new redis();





$redis->pconnect($v[0], $v[1]);





$trace = $_SERVER['SERVER_NAME'] . " exceptionn";





$trace .= "clint ip is
{$_SERVER['REMOTE_ADDR']} " . ",server is " . $_SERVER['SERVER_NAME'] . "(" . $_SERVER['SERVER_ADDR'] . ")"."n";





$trace.= "path is ".(isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:"empty")."n";





$trace .= "request params is =" . print_r($_POST, true);





return $redis->LPUSH('PHP_ERROR_WARNING', $trace . $msg);



} catch (Exception $e) {





return $e->getMessage();



}

}}/** * 优先重写common.php中对应方法 * @time 2019/3/21 16:19 * @author
* @param $severity * @param $message * @param $filepath * @param $line */function _error_handler($severity, $message, $filepath, $line){

$is_error = (((E_ERROR | E_PARSE | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR | E_STRICT) & $severity) === $severity);

if ($is_error) {



$error_msg = ($message . "n" . $filepath . "n" . $line);



redis_list_add($error_msg);



exit(json_encode(['success' => '-1', 'code' => 501, 'msg' => 'error']));

}}/** * 捕获php本身语法,对象调用,参数类型传递等错误 * 优先重写common.php中对应方法 * ParseError,object(Error),TypeError,Error * @time 2019/3/20 18:33 * @author
* @param $exception */function _exception_handler($exception){

$_tmp =& load_class('Exceptions', 'core');

if (!empty($exception)) {



$error_msg = ($exception->getMessage() . "n" . $exception->getTraceAsString());



redis_list_add($error_msg);



exit(json_encode(['success' => '-1', 'code' => 501, 'msg' => 'exception']));

}}/** * 优先重写common.php中对应方法 * require_once('no_exists.php') * @time 2019/3/21 9:49 * @author
*/function _shutdown_handler(){

$last_error = error_get_last();

if (isset($last_error) &&



($last_error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))) {



redis_list_add($msg = $last_error['message'] . "n" . $last_error['file'] . "n" . $last_error['line'] . "n");



exit(json_encode(['success' => '-1', 'code' => 501, 'msg' => 'shutdown']));

}}/** * 优先重写common.php中对应方法 * ci 框架内部的load异常、config异常、loader异常等会自动抛出, * 但common.php中的函数定义之类错误无法捕捉 * @time 2019/3/20 18:46 * @author
* @param $message * @param int $status_code */function show_error($message){

redis_list_add($message);

exit(json_encode(['success' => '-1', 'code' => '503', 'msg' => 'ci_exception_1']));}/** * 优先重写common.php中对应方法 * @time 2019/3/21 15:34 * @author
* @param string $page */function show_404($page = ''){

redis_list_add("url: " . $page . " not found");

exit(json_encode(['success' => '-1', 'code' => '404', 'msg' => 'Not Found']));}

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的PHP视频教程栏目!

以上就是CodeIgniter3.0+框架自定义异常处理的方法介绍的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的CodeIgniter3.0+框架自定义异常处理的方法介绍全部内容,希望文章能够帮你解决CodeIgniter3.0+框架自定义异常处理的方法介绍所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com