国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

CodeIgniter3.0+框架自定義異常處理實現(xiàn)

LinkedME2016 / 3289人閱讀

摘要:背景框架核心代碼自動實現(xiàn)了異常,并實現(xiàn)了拋出的對應(yīng)頁面和方法,對于一些個性化需求特別是接口類型的應(yīng)用,會不合適。因此需要在不改版核心代碼目錄下文件,來改變對異常及等相關(guān)異常的處理。方法說明框架比有比較大的改動,其中之一就是對異常的處理。

背景

ci3.0框架核心代碼自動實現(xiàn)了異常,并實現(xiàn)了拋出的對應(yīng)頁面和方法,對于一些個性化需求特別是接口類型的應(yīng)用,會不合適。因此需要在不改版核心代碼 (system目錄下文件),來改變對異常及404等相關(guān)異常的處理。

方法說明

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");
...

以上括號內(nèi)的方法均在common.php中以function_exists為前提聲明。

...
if ( ! function_exists("_exception_handler"))
{
...
代碼實現(xiàn)

我們簡單粗暴的在項目入口文件index.php中重寫以下方法

/**
 * 推送到redis cc異常隊列
 * @time 2019/3/21 15:29
 * @author tongbo
 * @param $msg
 * @param $error_type
 * @param $error_code
 * @return bool|int|string
 */
function redis_list_add($msg, $error_type, $error_code)
{
    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]);
            $space = "

";
            $trace = "";
            if ($error_code) {
                $trace .= "狀態(tài)碼    :" . $error_code . "
";
            }
            if ($error_type) {
                $trace .= "錯誤類型 :" . $error_type . "
";
            }
            $trace .= "客戶端IP : " . $_SERVER["REMOTE_ADDR"] . "
";
            $trace .= "服務(wù)端IP : " . $_SERVER["SERVER_NAME"] . "(" . $_SERVER["SERVER_ADDR"] . ")" . "
";
            $trace .= "請求地址 : " . (isset($_SERVER["REQUEST_URI"]) ? $_SERVER["REQUEST_URI"] : "empty") . "
";
            $trace .= "請求參數(shù) : =" . print_r($_REQUEST ? $_REQUEST : $_GET, true) . "
";
            return $redis->LPUSH("CC_PHP_ERROR_WARNING", $space . $msg . $space . $trace);
        } catch (Exception $e) {
            return $e->getMessage();
        }
    }
}

/**
 * 優(yōu)先重寫common.php中對應(yīng)方法
 * 捕捉語法錯誤
 * @time 2019/3/21 16:19
 * @author tongbo
 * @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 . "
" . $filepath . "
" . $line;
        $error_code = "501";
        redis_list_add($error_msg, "Error_Handler異常", $error_code);
        exit(json_encode(["success" => "-1", "code" => $error_code, "msg" => "error"]));
    }
}

/**
 * 捕獲php本身語法,對象調(diào)用,參數(shù)類型傳遞等錯誤
 * 優(yōu)先重寫common.php中對應(yīng)方法
 * ParseError,object(Error),TypeError,Error
 * @time 2019/3/20 18:33
 * @author tongbo
 * @param $exception
 */
function _exception_handler($exception)
{
    if (!empty($exception)) {
        $error_type = get_class($exception);
        $error_msg = "
錯誤類型:  {$error_type};
文件名:  {$exception->getFile()}; 
所在行號:  {$exception->getLine()}; 
錯誤消息:  {$exception->getMessage()}; ";

        $error_code = "502";
        redis_list_add($error_msg, $error_type, $error_code);
        exit(json_encode(["success" => "-1", "code" => $error_code, "msg" => "exception"]));
    }
}

/**
 * 優(yōu)先重寫common.php中對應(yīng)方法
 * require_once("no_exists.php")
 * @time 2019/3/21 9:49
 * @author tongbo
 */
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))) {
        $error_msg = "
錯誤類型:  shutdown; >
文件名:  {$last_error["file"]}; 
所在行號:  {$last_error["line"]}; 
錯誤消息:  {$last_error["message"]}; ";
        $error_code = "503";
        redis_list_add($error_msg, "Shut_Down異常", $error_code);
        exit(json_encode(["success" => "-1", "code" => $error_code, "msg" => "shutdown"]));
    }
}

/**
 * 優(yōu)先重寫common.php中對應(yīng)方法
 * ci 框架內(nèi)部的load異常、config異常、loader異常等會自動拋出,
 * 但common.php中的函數(shù)定義之類錯誤無法捕捉
 * @time 2019/3/20 18:46
 * @author tongbo
 * @param $message
 * @param int $status_code
 */
function show_error($message)
{
    $error_msg = "錯誤消息:  {$message}; ";
    $error_code = "504";
    redis_list_add($error_msg, "框架加載異常", $error_code);
    exit(json_encode(["success" => "-1", "code" => $error_code, "msg" => "ci_exception_1"]));
}

/**
 * 優(yōu)先重寫common.php中對應(yīng)方法
 * @time 2019/3/21 15:34
 * @author tongbo
 * @param string $page
 */
function show_404($page = "")
{
    $error_msg = "錯誤消息: 請求的URL: " . $page . " 404 not found";
    $error_code = "404";
    redis_list_add($error_msg, "文件不存在", $error_code);
    exit(json_encode(["success" => "-1", "code" => $error_code, "msg" => "Not Found"]));
}
延伸

在基類中可以處理

錯誤等級區(qū)分對待

將錯誤處理寫到其他地方,require_once進來

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31108.html

相關(guān)文章

  • PHP項目中CodeIgniter使用的一些建議

    摘要:把如下代碼添加到目錄下的文件中類的構(gòu)造函數(shù)之前,這其實就是進行變量聲明,文件也是同樣操作。舉一個我項目中的例子。該類只需要一個構(gòu)造函數(shù)完成上述功能即可。 最近再給一個APP寫API,同時還要寫相應(yīng)的后臺管理網(wǎng)站。為了便于開發(fā)和代碼組織與管理,我決定采用一個現(xiàn)有的框架。Codeigniter由于其輕量容易自定制的特點吸引了我,一路開發(fā)過來也有大半年時間了,寫下一些自己在開發(fā)過程中的一些體...

    Barrior 評論0 收藏0
  • 0開始構(gòu)建一個屬于你己的PHP框架

    摘要:如何構(gòu)建一個自己的框架為什么我們要去構(gòu)建一個自己的框架可能絕大多數(shù)的人都會說市面上已經(jīng)那么多的框架了,還造什么輪子。 showImg(https://segmentfault.com/img/bVNg9F?w=500&h=500); 如何構(gòu)建一個自己的PHP框架 為什么我們要去構(gòu)建一個自己的PHP框架?可能絕大多數(shù)的人都會說市面上已經(jīng)那么多的框架了,還造什么輪子?。我的觀點造輪子不是目...

    vpants 評論0 收藏0
  • PHP框架中的日志系統(tǒng)

    摘要:一的幾個函數(shù)異常捕獲自定義處理函數(shù)注冊錯誤捕獲自定義處理函數(shù)注冊程序執(zhí)行時異常終止錯誤捕獲處理函數(shù)注冊這三個函數(shù)在錯誤處理控制中給開發(fā)者提供了很大的自主空間,在日志系統(tǒng)中記錄日志信息有他們的功勞。下面要說的類庫是借鑒了日志系統(tǒng)的設(shè)計。 引言 接觸過php框架的朋友們可能都知道,日志在項目中的重要作用了,他可以幫助我們定位錯誤的位置,讓程序更友好(處理得當(dāng)?shù)脑挷粫苯訏伋鲆淮蠖阎挥谐?..

    ningwang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<