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'])); }
這篇文章到這裡就已經全部結束了,更多其他精彩內容可以關注PHP中文網的PHP影片教學專欄!
#以上是CodeIgniter3.0+框架自訂異常處理的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲
