CodeIgniter3.0 +框架自如何定义异常处理

  介绍

这篇文章主要介绍了CodeIgniter3.0 +框架自如何定义异常处理,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。

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

方法说明

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

/*   * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   *定义一个自定义错误处理程序我们可以PHP错误日志   * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   */set_error_handler (& # 39; _error_handler& # 39;);   set_exception_handler (& # 39; _exception_handler& # 39;);   register_shutdown_function (& # 39; _shutdown_handler& # 39;);   …

以上括号内的方法均在<代码>常见。php代码中以<代码> function_exists> …   如果(!function_exists (& # 39; _exception_handler& # 39;))   {   …

代码实现

我们简单粗暴的在项目入口文件<代码>索引。> /* *   *推送到复述,异常队列   * @time 2019/3/21十五29   * @author   * @param $味精   int * @return bool | |字符串   */函数redis_list_add (msg)美元   {   报错(& # 39;default_socket_timeout& # 39;, 1);   美元v=爆炸(& # 39;:& # 39;$ _SERVER [& # 39; SITE_REDIS_SERVER& # 39;]);   如果(is_array (v),,!空(v)美元){   尝试{   复述,美元=new复述();   复述→美元pconnect (v v[0],美元[1]);   跟踪美元=$ _SERVER [& # 39; server_name # 39;]。“;例外\ n";   跟踪美元。=翱肆痔亍p是{$ _SERVER [& # 39; REMOTE_ADDR& # 39;]}“;。“服务器”;。$ _SERVER [& # 39; server_name # 39;]。“(“;。$ _SERVER [& # 39; SERVER_ADDR& # 39;]。“)“霸主地位;\ n";   跟踪美元。是“=奥肪丁?收取($ _SERVER [& # 39; REQUEST_URI& # 39;]) ? $ _SERVER [& # 39; REQUEST_URI& # 39;]:“empty")干净\ n";   跟踪美元。=扒肭髉arams=?。print_r ($ _POST,真实);   返回$复述→LPUSH (& # 39; PHP_ERROR_WARNING& # 39;,跟踪美元。美元味精);   }捕捉(异常$ e) {   返回$ e→getMessage ();   }   }   }/* *   *优先重写common.php中对应方法   * @time 2019/3/21 16:19   * @author   * @param美元严重程度   * @param美元消息   * @param filepath美元   * @param $行   */函数_error_handler(严重性,消息,美元filepath美元,美元线)   {   美元is_error=(((E_ERROR | E_PARSE | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR |代码),严重程度)===美元严重程度);      如果(is_error美元){   (error_msg=美元消息。“\ n"。filepath美元。“\ n"。行美元);   redis_list_add ($ error_msg);   退出(json_encode([& # 39;成功# 39;=比;& # 39;1 & # 39;& # 39;代码# 39;=比;501年,& # 39;味精# 39;=比;& # 39;错误# 39;]));   }   }/* *   *捕获php本身语法,对象调用,参数类型传递等错误   *优先重写common.php中对应方法   * ParseError,对象(错误)、TypeError错误   * @time 2019/3/20十八33   * @author   *例外(@param美元   */函数_exception_handler(美元除外)   {   $ _tmp=,load_class(& # 39;例外# 39;,& # 39;核心# 39;);   如果(!空(例外)美元){   (error_msg=美元异常→getMessage ()。“\ n"。异常→美元getTraceAsString ());   redis_list_add ($ error_msg);   退出(json_encode([& # 39;成功# 39;=比;& # 39;1 & # 39;& # 39;代码# 39;=比;501年,& # 39;味精# 39;=比;& # 39;例外# 39;]));   }   }/* *   *优先重写common.php中对应方法   * require_once (& # 39; no_exists.php& # 39;)   * @time 2019/3/21利比亚   * @author   */_shutdown_handler()函数   {   $ last_error=error_get_last ();   如果收取(last_error美元),,   ($ last_error[& # 39;类型# 39;],(E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))) {   redis_list_add(味精=last_error美元[& # 39;消息# 39;]。“\ n"。$ last_error[& # 39;文件# 39;]。“\ n"。$ last_error[& # 39;行# 39;]。“\ n");   退出(json_encode([& # 39;成功# 39;=比;& # 39;1 & # 39;& # 39;代码# 39;=比;501年,& # 39;味精# 39;=比;& # 39;关闭# 39;]));   }   }/* *   *优先重写common.php中对应方法   * ci框架内部的负荷异常,配置异常,装载机异常等会自动抛出,   *但common.php中的函数定义之类错误无法捕捉   * @time 2019/3/20 18:46   * @author   * @param美元消息   * @param int status_code美元   */函数show_error(消息)美元   {   redis_list_add(消息);   退出(json_encode([& # 39;成功# 39;=比;& # 39;1 & # 39;& # 39;代码# 39;=比;& # 39;503 & # 39;& # 39;味精# 39;=比;& # 39;ci_exception_1& # 39;]));   }/* *   *优先重写common.php中对应方法   * @time 2019/3/21 15:34   * @author   * @param字符串$页面   */函数show_404($页面=& # 39;& # 39;)   {   redis_list_add (url:“;。美元的页面。“;不是found");   退出(json_encode([& # 39;成功# 39;=比;& # 39;1 & # 39;& # 39;代码# 39;=比;& # 39;404 & # 39;& # 39;味精# 39;=比;& # 39;没有发现# 39;]));   }

CodeIgniter3.0 +框架自如何定义异常处理