Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  php  >  正文 CodeIgniter3.0 框架自定义异常处理的方法介绍

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

发布时间:2021-01-13   编辑:www.jquerycn.cn
jquery中文网为您提供CodeIgniter3.0 框架自定义异常处理的方法介绍等资源,欢迎您收藏本站,我们将为您提供最新的CodeIgniter3.0 框架自定义异常处理的方法介绍资源

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

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

方法说明

ci框架3.0比2.0有比较大的改动,其中之一就是对异常的处理。以下是CodeIgniter-3.1.8\system\core\CodeIgniter.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'] . " exception\n";             $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'])); }

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

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

  • 本文转载于:segmentfault,如有侵犯,请联系jquerycn@qq.com删除
  • 您可能感兴趣的文章:
    JavaScript编程基础(13)-框架编程
    关于PHP框架中日志系统的详解
    PHP异常处理类BADMETHODCALLEXCEPTION使用方法
    爬虫框架 Scrapy入门基础之Spider Middleware
    PHP 框架中的日志系统
    php能做分布式吗
    .NET 2.0中的企业库异常处理块
    Struts2异常处理的使用例子
    Python3爬虫入门:Scrapy 框架
    php框架底层源码怎么看

    [关闭]