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

資訊專欄INFORMATION COLUMN

CodeIgniter框架中抽取部分類庫做問題追蹤的思路

沈儉 / 3110人閱讀

摘要:背景由于各種原因,沒有接入完整的調(diào)用鏈追蹤,。顯然,有基本的操作。抽取整個對象的所有對象實例隊列中的結(jié)果不足框架中不可避免的使用了操作,或者其他業(yè)務(wù)代碼中也使用。這樣導(dǎo)致鉤子函數(shù)無法正常完成他的使用。

背景

由于各種原因,沒有接入完整的調(diào)用鏈追蹤,(┬_┬)。但是我們自身再通過php的curl調(diào)用各端接口時,會請求多次。那么有沒有一種方法可以在不植入業(yè)務(wù)代碼的前提下,捕捉到這些curl的請求呢。顯然,ci有基本的hook操作。我們可以在相關(guān)節(jié)點時,可選擇的把這些收集到到的通過異步的方式發(fā)送給指定的監(jiān)聽者。

curl類庫(部分代碼)
class Ycurl
{
    public $resource_arr;
    public static $resource_id = 0; //資源(resource handle id
    public $save_requests = true;//是否保存,默認(rèn)全部保存
    public $requests = array();//n次請求參數(shù)、返回參數(shù),錯誤(如果有)
    public $request_counts = 0;//總的請求次數(shù),可能一個頁面調(diào)用多次
    public $send_redis_email = false;//是否需要以異常方式發(fā)送郵件

    ...
    
   $ret = curl_exec($ch);
    $curl_info_arr = curl_getinfo($ch);
    $this->request_counts += 1;
    if ($this->save_requests === true) {
        $arg_list = func_get_args();
        $this->requests[$resource_id]["url"] = $curl_info_arr["url"];
        $this->requests[$resource_id]["req_params"] = json_encode([$arg_list], 320);
        $this->requests[$resource_id]["response"] = $ret;
        $this->requests[$resource_id]["http_code"] = $curl_info_arr["http_code"];
        $this->requests[$resource_id]["is_error"] = curl_error($ch);

        $this->requests[$resource_id]["total_time"] = $curl_info_arr["total_time"];
        $this->requests[$resource_id]["primary_ip"] = $curl_info_arr["primary_ip"];

        if($this->send_redis_email){
            redis_list_add(json_encode($this->requests,320));
        }
    }
hooks config

從ci對象中抽取curl對象,其他自定義的對象也可以同樣思路。

$hook["post_system"][] = array(
    "class"    => "Curl_trace",
    "function" => "_split_ci_of_curl",
    "filename" => "curl_trace.php",
    "filepath" => "hooks"
curl_trace.php
ci =& get_instance();
    }

    /**
     *抽取整個ci對象的所有curl對象實例
     * @time 2019/3/1 11:12
     * @author tongbo
     */
    public function _split_ci_of_curl()
    {
        $class = $this->ci->router->fetch_class();
        $need_trace_controller = [
            "home",
            "admin",
        ];
        $func = $this->ci->router->fetch_method();


        if (in_array($class, $need_trace_controller) or 1) {
            foreach (get_object_vars($this->ci) as $name => $ci_object) {
                if (is_object($ci_object)) {
                    if ($ci_object instanceof Ycurl) {
                        $curls[get_class($this->ci) . "/{$func}:$" . $name] = $ci_object;
                    }
                }
            }
            if (!empty($curls)) {
                foreach ($curls as $ctl_func => $curl) {
                    foreach ($curl->requests as $index => $single_curl_obj) {
                        $tmp[$ctl_func][$index] = $single_curl_obj;
                        $tmp[$ctl_func][$index]["record_time"] = date("Ymd H:i:s" . substr((string)microtime(), 1, 8) . " e");
                        redis_list_add(json_encode([$ctl_func . "_" . $index, $tmp[$ctl_func][$index]], 320));
                    }

                }

            }

        }
    }

}
隊列中的結(jié)果

不足

ci框架中不可避免的使用了exit操作,或者其他業(yè)務(wù)代碼中也使用。這樣導(dǎo)致鉤子函數(shù)無法正常完成他的使用。除了必要規(guī)范不必要的exit之外,我們也可以用register_shut_down這個函數(shù)來實現(xiàn)每次都必須記錄。(考慮性價比吧)

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

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

相關(guān)文章

  • 最全知識圖譜綜述#1: 概念以及構(gòu)建技術(shù)

    摘要:本質(zhì)上知識圖譜旨在描述真實世界中存在的各種實體或概念及其關(guān)系其構(gòu)成一張巨大的語義網(wǎng)絡(luò)圖,節(jié)點表示實體或概念,邊則由屬性或關(guān)系構(gòu)成。圖知識圖譜示例知識圖譜的架構(gòu)知識圖譜的架構(gòu)包括自身的邏輯結(jié)構(gòu)以及構(gòu)建知識圖譜所采用的技術(shù)體系架構(gòu)。 引言隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)內(nèi)容呈現(xiàn)爆炸式增長的態(tài)勢。由于互聯(lián)網(wǎng)內(nèi)容的大規(guī)模、異質(zhì)多元、組織結(jié)構(gòu)松散的特點,給人們有效獲取信息和知識提出了挑戰(zhàn)。知識圖譜(Know...

    wujl596 評論0 收藏0
  • 【譯】CodeIgniter HMVC模塊擴(kuò)展使用文檔

    摘要:和模塊分離類似,模塊擴(kuò)展使得模塊變得可便攜的。模塊化意味著模塊化。但是,模塊擴(kuò)展更進(jìn)一步,它允許這些模塊互相通信。 CodeIgniter HMVC擴(kuò)展說明 原文地址:Modular Extensions - HMVC 模塊擴(kuò)展——HMVC 模塊擴(kuò)展讓CodeIgniter框架模塊化。模塊是一組獨(dú)立的組件(通常有模型、控制器和視圖),它們被分類在應(yīng)用模塊的子文件夾中,并且能夠直接拖到其...

    teren 評論0 收藏0
  • CI3設(shè)置子目錄控制器為默認(rèn)控制器解決辦法

    摘要:在框架中配置文件多目錄前后臺應(yīng)該是個很常見的事情。于是在求學(xué)問道的途中,終于得到了比較完美的解決方法。業(yè)務(wù)需求環(huán)境需求在中實現(xiàn)前后臺的效果。因為已經(jīng)不支持設(shè)置子目錄下的控制器為默認(rèn)控制器的功能。 showImg(https://segmentfault.com/img/remote/1460000010545771); ????在框架中配置文件多目錄、前后臺應(yīng)該是個很常見的事情。像一...

    niceforbear 評論0 收藏0

發(fā)表評論

0條評論

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