摘要:背景由于各種原因,沒有接入完整的調用鏈追蹤,。顯然,有基本的操作。抽取整個對象的所有對象實例隊列中的結果不足框架中不可避免的使用了操作,或者其他業務代碼中也使用。這樣導致鉤子函數無法正常完成他的使用。
背景
由于各種原因,沒有接入完整的調用鏈追蹤,(┬_┬)。但是我們自身再通過php的curl調用各端接口時,會請求多次。那么有沒有一種方法可以在不植入業務代碼的前提下,捕捉到這些curl的請求呢。顯然,ci有基本的hook操作。我們可以在相關節點時,可選擇的把這些收集到到的通過異步的方式發送給指定的監聽者。
curl類庫(部分代碼)class Ycurl { public $resource_arr; public static $resource_id = 0; //資源(resource handle id public $save_requests = true;//是否保存,默認全部保存 public $requests = array();//n次請求參數、返回參數,錯誤(如果有) public $request_counts = 0;//總的請求次數,可能一個頁面調用多次 public $send_redis_email = false;//是否需要以異常方式發送郵件 ... $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)); } } } } } }隊列中的結果 不足
ci框架中不可避免的使用了exit操作,或者其他業務代碼中也使用。這樣導致鉤子函數無法正常完成他的使用。除了必要規范不必要的exit之外,我們也可以用register_shut_down這個函數來實現每次都必須記錄。(考慮性價比吧)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31325.html
摘要:本質上知識圖譜旨在描述真實世界中存在的各種實體或概念及其關系其構成一張巨大的語義網絡圖,節點表示實體或概念,邊則由屬性或關系構成。圖知識圖譜示例知識圖譜的架構知識圖譜的架構包括自身的邏輯結構以及構建知識圖譜所采用的技術體系架構。 引言隨著互聯網的發展,網絡數據內容呈現爆炸式增長的態勢。由于互聯網內容的大規模、異質多元、組織結構松散的特點,給人們有效獲取信息和知識提出了挑戰。知識圖譜(Know...
摘要:和模塊分離類似,模塊擴展使得模塊變得可便攜的。模塊化意味著模塊化。但是,模塊擴展更進一步,它允許這些模塊互相通信。 CodeIgniter HMVC擴展說明 原文地址:Modular Extensions - HMVC 模塊擴展——HMVC 模塊擴展讓CodeIgniter框架模塊化。模塊是一組獨立的組件(通常有模型、控制器和視圖),它們被分類在應用模塊的子文件夾中,并且能夠直接拖到其...
摘要:在框架中配置文件多目錄前后臺應該是個很常見的事情。于是在求學問道的途中,終于得到了比較完美的解決方法。業務需求環境需求在中實現前后臺的效果。因為已經不支持設置子目錄下的控制器為默認控制器的功能。 showImg(https://segmentfault.com/img/remote/1460000010545771); ????在框架中配置文件多目錄、前后臺應該是個很常見的事情。像一...
閱讀 2167·2021-11-15 11:36
閱讀 1511·2021-09-23 11:55
閱讀 2501·2021-09-22 15:16
閱讀 2037·2019-08-30 15:45
閱讀 1873·2019-08-29 11:10
閱讀 1039·2019-08-26 13:40
閱讀 927·2019-08-26 10:44
閱讀 3180·2019-08-23 14:55