五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > php框架codeigniter框架源代碼分析,注釋中文化,類庫分析(一)

php框架codeigniter框架源代碼分析,注釋中文化,類庫分析(一)

文章來源:365jz.com     點擊數(shù):735    更新時間:2009-09-15 10:11   參與評論

最近這幾天決定看 ci框架的源代碼的,因為它是輕量級的,代碼文件的結(jié)構(gòu)比較清晰,又index.php作為入口,在codeigniter.php文件中加載所有的基礎(chǔ)類,于是我挨個類滴看下去,并且在看的時候分析了每一步關(guān)鍵的進(jìn)程,而且對原來的英文注釋進(jìn)行了翻譯,現(xiàn)在主要文件已經(jīng)翻譯完成,稍候會翻譯并分析一些其他的重要的類,敬請期待


這里的是 它的詳細(xì)的執(zhí)行過程,從入口到最后結(jié)束,進(jìn)行了完整的記錄,大家先看著,其他的分析,例如,CI超類的結(jié)構(gòu),如何實現(xiàn)MVC模式,數(shù)據(jù)庫類的實現(xiàn),xss過濾類的詳細(xì)分析等等內(nèi)容以后陸續(xù)會登陸

 

版權(quán)聲明本博客(小MM)所有文章均為原創(chuàng),如果你對本博客的文章感興趣,可以留下你的QQ或者加本人的QQ:676588498,如果轉(zhuǎn)載本博客的文章,請注明出處,并附加說明和連接(http://www.cnblogs.com/mier),謝謝支持哦

 從這里下載源文件:/Files/mier/ci的執(zhí)行流程.txt 下載后把文件后綴改為 .php即可正常在ide里瀏覽

 

  1 <?php
  2 //約定:變量后圓括號內(nèi)為變量的含義,方括號為變量的值
  3 1.index.php.
  4     (1),初始化一些系統(tǒng)變量,包括:
  5                 $system_folder(系統(tǒng)文件夾[system]),
  6                 $application_folder(應(yīng)用程序文件夾[application])
  7     (2).定義一些常量,包括:
  8                 EXT(文件擴(kuò)展名[pathinfo(__FILE__, PATHINFO_EXTENSION)]),
  9                 FCPATH(文件在服務(wù)器中的完整路徑名[__FILE__]),
 10                 SELF(包含擴(kuò)展名的文件名[pathinfo(__FILE__, PATHINFO_BASENAME)]),
 11                 BASEPATH(系統(tǒng)文件夾的路徑[$system_folder.'/']),
 12                 APPPATH(程序所在文件夾[$application_folder.'/']),
 13      (3).定向至
 14                 BASEPATH.'codeigniter/CodeIgniter'.EXT;
 15      (4).結(jié)束
 16 ?>
 17 <?php
 18 2.CodeIgniter.php(系統(tǒng)前臺控制器,加載基本類和處理請求)
 19     (1),加載全局函數(shù),這些全局函數(shù)在后面的加載類和獲取配置項方面發(fā)揮作用,
 20                  require(BASEPATH.'codeigniter/Common'.EXT);
 21                  Common.php中擁有如下函數(shù):
 22                         is_really_writable($file);//判斷文件是否可寫
 23                         &load_class($class, $instantiate = TRUE)//這個函數(shù)利用單件模式,當(dāng)請求的class不存在時就加載這個類,然后將其設(shè)置成一個靜態(tài)變量,如果已經(jīng)加載了這個類,則返回這個類的安裝變量
 24                                                                                       //第二個參數(shù)指示,是否實例化此類,如果設(shè)置為false,則只是包含此類的文件而不進(jìn)行實例化,返回的值為true/false只是是否加載成功
 25                                                                                       //從libraries中加載類庫
 26                         &get_config()//返回config.php文件中的配置數(shù)組
 27                         config_item($item//獲取某個配置項
 28                         show_error($message)//顯示錯誤
 29                         show_404($page = '')//顯示404錯誤
 30                         log_message($level = 'error', $message, $php_error = FALSE)//將信息寫入日志
 31                         _exception_handler($severity, $message, $filepath, $line)//錯誤處理函數(shù),可以攔截錯誤并寫入到指定的文件中
 32      (2),兼容性函數(shù) ,處理一些在某些版本中不存在的函數(shù)
 33                  require(BASEPATH.'codeigniter/Compat'.EXT);
 34                  Compat.php中存在下列內(nèi)容:
 35                         定義了錯誤顯示級別:define('E_STRICT', 2048);
 36                         定義了函數(shù):ctype_digit($str)//字符串中只包含數(shù)字,否則返回false
 37                         定義了函數(shù):ctype_alnum($str);//字符串中只包含數(shù)字或者字母,否則返回false
 38      (3).加載框架常量
 39                 require(APPPATH.'config/constants'.EXT);
 40                 此文件中定義的常量具體見文件中,此處省略
 41      (4).設(shè)置錯誤處理,禁用magic_quotes_runtime
 42      (5).導(dǎo)入benchmark類,設(shè)置斷點并調(diào)試斷點,這個類使你可以設(shè)置斷點來計算運行時間和消耗的內(nèi)存
 43                 $BM =& load_class('Benchmark');
 44                 Benchmark類中有下列屬性和方法:
 45                         var $marker = array();//斷點的數(shù)組
 46                         function mark($name)//設(shè)置一個斷點,將現(xiàn)在的時間以微秒標(biāo)識賦值給此變量
 47                         function elapsed_time($point1 = '', $point2 = '', $decimals = 4)//計算兩個斷點的間隔時間,如果第一個斷點的值為空,則返回一個標(biāo)簽{elapsed_time},在output類中將處理這個標(biāo)簽
 48                         function memory_usage()//返回一個{memory_usage}標(biāo)簽,在output類中將處理這個標(biāo)簽,因為顯示整個腳本的消耗內(nèi)存量才是有意義的
 49      (6).加載鉤子類,提供了一種機(jī)制來擴(kuò)展基本系統(tǒng)的運行方式,即在某些點插入你自己要運行的腳本,包括諸多可選點
 50                 $EXT =& load_class('Hooks');
 51                  此類包含如下的屬性和方法:
 52                         var $enabled         = FALSE;//是否啟用鉤子
 53                         var $hooks           = array();//鉤子數(shù)組
 54                         var $in_progress    = FALSE;//標(biāo)識是否正在運行鉤子
 55                         function _initialize()//判斷是否啟用hooks,如果啟用的話就在config/hooks.php中加載hooks,并賦給$hooks屬性
 56                         function _call_hook($which = '')//調(diào)用鉤子,可以設(shè)置的鉤子是有限的,見此文件中的類庫說明
 57                         function _run_hook($data)//運行鉤子,根據(jù)鉤子的設(shè)置數(shù)組來包含文件,實例化類,運行其方法,以及附加屬性
 58      (7).加載并實例化Config類,從config文件夾加載配置文件,也就是允許你在config文件夾中建立自己的配置文件,但是在此文件中必須以$config[""]數(shù)組的形式定義配置項
 59                 $CFG =& load_class('Config');
 60                 此類包含如下屬性和方法:
 61                         var $config = array();//config數(shù)組
 62                         var $is_loaded = array();//已經(jīng)加載的配置文件
 63                         function CI_Config()//構(gòu)造函數(shù),獲取config.php中的基本config項并賦值給$config屬性
 64                         function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)//從config文件夾中加載配置文件(加載成功添加至$is_loaded屬性),并加載配置項至$config屬性
 65                         function item($item, $index = '')//返回某個配置項,$index允許配置以二維數(shù)組的形式出現(xiàn),當(dāng)配置為二維數(shù)組的時候,則用$config[$index][$item]
 66                         function slash_item($item)//獲取一個配置項,并在其后加上一個"/"符號
 67                         function site_url($uri = '')//根據(jù)config設(shè)置將uri轉(zhuǎn)化成完整的url形式
 68                         function system_url()//返回系統(tǒng)文件夾的完整路徑
 69                         function set_item($item, $value)//設(shè)置某個設(shè)置項的值,只是設(shè)置在屬性里,不會更改文件的設(shè)置
 70      (8).加載并實例化URI類,此類將截取當(dāng)前url的參數(shù)部分,并分解成控制器以及方法以及參數(shù),供主函數(shù)調(diào)用
 71                 $URI =& load_class('URI');
 72                 此類包含如下屬性和方法:
 73                         var    $keyval    = array();
 74                         var $uri_string;//index.php后面的字符串
 75                         var $segments        = array();
 76                         var $rsegments        = array();
 77                         function _fetch_uri_string()//得到index.php后面的字符串并賦值給屬性 $uri_string.
 78                         function _parse_request_uri()//處理uri中的騷擾字符,使其能正常工作
 79                         function _filter_uri($str)//過濾字符串,對特殊字符進(jìn)行轉(zhuǎn)義
 80                         function _remove_url_suffix()//如果在配置中設(shè)置了偽后綴名,則去掉這個后綴
 81                         function _explode_segments()//將字符串按"/"分解到$segments中
 82                         function _reindex_segments()//利用巧妙的方法改變$segments數(shù)組的索引,使其索引從1開始,這樣更符合直觀感受
 83                         function segment($n, $no_result = FALSE)//返回指定索引的參數(shù),即$segments[$n]的值
 84                         function rsegment($n, $no_result = FALSE)//這個函數(shù)和上面的函數(shù)基本功能一樣,不同點在于它允許你在開啟CodeIgniter的URI路由功能時進(jìn)行詳細(xì)分割并重新分發(fā)URI信息
 85                         function uri_to_assoc($n = 3, $default = array())//將第三個參數(shù)之后的參數(shù)以關(guān)聯(lián)數(shù)組的方式返回 其中第三個參數(shù)是第一個返回數(shù)組的key,第四個參數(shù)是第一個返回數(shù)組的value
 86                                                                                                     //以此類推
 87                         function ruri_to_assoc($n = 3, $default = array())//同上,只是應(yīng)用于路由功能
 88                         function _uri_to_assoc($n = 3, $default = array(), $which = 'segment')//同上
 89                         function assoc_to_uri($array)//與上述方法的功能相反
 90                         function _slash_segment($n, $where = 'trailing', $which = 'segment')//添加斜線,當(dāng)$where="trailing"時在末尾添加,="leading"時在開頭添加
 91                         function segment_array()//返回$segments
 92                         function total_segments()//$segments的總數(shù)
 93     (9).加載并實例化Router類,這個類處理uri來加載控制器和控制器方法
 94                 $RTR =& load_class('Router');
 95                  此類包含如下屬性和方法:
 96                         var $config;
 97                         var $routes         = array();//路由規(guī)則,在routes.php中定義
 98                         var $error_routes    = array();
 99                         var $class            = '';
100                         var $method            = 'index';
101                         var $directory        = '';
102                         var $uri_protocol     = 'auto';
103                         var $default_controller;//默認(rèn)的控制器
104                         var $scaffolding_request = FALSE// Must be set to FALSE
105                         function _set_routing()//設(shè)置默認(rèn)的路由信息,如果不存在控制器信息,則根據(jù)routes.php的設(shè)置來加載默認(rèn)的控制器,
106                         function _set_request($segments = array())//這個方法以一個數(shù)組輸入來調(diào)用set_class和set_method來發(fā)送請求
107                         function _validate_request($segments)//檢查是否在uri中包含了文件夾信息,如果包含,則將其值賦給屬性$directory
108                         function _parse_routes()//處理路由,根據(jù)路由設(shè)置來
109                         function set_class($class)//設(shè)置控制器類
110                         function fetch_class()
111                         function set_method($method)//設(shè)置控制器方法
112                         function fetch_method()
113                         function set_directory($dir)//設(shè)置文件夾
114      (10).加載并實例化Output類
115                 $OUT =& load_class('Output');
116                 此類包含如下的方法和屬性:
117                         var $final_output;
118                         var $cache_expiration    = 0;
119                         var $headers             = array();
120                         var $enable_profiler     = FALSE;
121                         function enable_profiler($val = TRUE)//允許你開啟或禁用評測器,評測器將在頁的底部顯示測試基準(zhǔn)點或調(diào)試、優(yōu)化需要的其他數(shù)據(jù)
122                         function get_output()
123                         function set_output($output)
124                         function append_output($output)//附加輸出的內(nèi)容
125                         function set_header($header, $replace = TRUE)//設(shè)置要發(fā)送的header到數(shù)組屬性 $headers
126                         function set_status_header($code = '200', $text = '')//設(shè)置狀態(tài)碼
127                         function cache($time)//設(shè)置緩存以及緩存時間 ,以分鐘為單位
128                         function _display($output = '')//這個方法將生成并輸出至客戶端,如果開啟了profiler則在頁尾添加性能分析結(jié)果,如果設(shè)置了緩存,則調(diào)用緩存文件
129                         function _write_cache($output)//根據(jù)設(shè)置的緩存時間寫緩存文件
130                         function _display_cache(&$CFG, &$URI)//顯示緩存文件,根據(jù)url尋找文件(md5加密形式的文件名),如果存在則顯示,如果過期,則刪除
131      (11).判斷是否存在緩存文件,如果存在則顯示,并退出
132      (12).加載input類,這個類用來處理過濾用戶的輸入,防止產(chǎn)生各種攻擊
133                  $IN        =& load_class('Input');
134                          var $use_xss_clean        = FALSE;
135                         var $xss_hash            = '';
136                         var $ip_address            = FALSE;
137                         var $user_agent            = FALSE;
138                         var $allow_get_array    = FALSE;
139                          var $never_allowed_str = array()//過濾的字符串,詳細(xì)見類文件定義
140                          var $never_allowed_regex =array()//用正則過濾,詳細(xì)見類文件定義
141                          function CI_Input()//構(gòu)造函數(shù),從配置文件判斷是否開啟安全功能,然后調(diào)用下面的方法
142                          function _sanitize_globals()//清除globals變量,在開啟了globals_register的情況下,相當(dāng)于關(guān)閉了此配置項
143                          function _clean_input_data($str)//過濾輸入的數(shù)據(jù)
144                          function _clean_input_keys($str)//過濾鍵值
145                          function _fetch_from_array(&$array, $index = '', $xss_clean = FALSE)//從$array獲取值,如果設(shè)置了xss_clean則過濾之
146                          function get($index = '', $xss_clean = FALSE)//獲取過濾后的get數(shù)組
147                          function post($index = '', $xss_clean = FALSE)//獲取過濾后的post數(shù)組
148                          function get_post($index = '', $xss_clean = FALSE)//獲取post數(shù)組,如果沒有則從get數(shù)組獲取
149                          function cookie($index = '', $xss_clean = FALSE)//獲取cookie數(shù)組
150                          function server($index = '', $xss_clean = FALSE)//獲取服務(wù)器變量數(shù)組
151                          function ip_address()//獲取ip地址
152                          function valid_ip($ip)//驗證ip地址
153                          function filename_security($str)//過濾文件名中的隱患
154                          function xss_clean($str, $is_image = FALSE)//執(zhí)行各種xss過濾
155                          function _remove_invisible_characters($str)//移除不可見的符號
156                          省略了一系列xss_clean中的回調(diào)函數(shù),對輸入執(zhí)行各種安全過濾
157      (13).加載language類
158                  $LANG    =& load_class('Language');
159                  省略此類的描述
160      (14).加載controller類
161                  load_class('Controller', FALSE);
162                  只包含此文件而不實例化此類
163                  如果php版本小于5則加載loader類
164      (15).根據(jù)uri來在controller文件夾中尋找控制器類和方法,如果找不到則退出,找到則包含文件
165                  $class  = $RTR->fetch_class();//獲取請求的類
166                 $method = $RTR->fetch_method();//獲取請求的方法
167      (16).
168      (17).$CI = new $class();//加載超類,超類是以控制器中的類為基礎(chǔ)創(chuàng)建的
169              判斷是否是附帶腳手架的請求
170      (18)Controller類的結(jié)構(gòu):此類繼承自CI_Base類
171                          var $_ci_scaffolding    = FALSE;
172                         var $_ci_scaff_table    = FALSE;
173                         function Controller()//構(gòu)造函數(shù),執(zhí)行parent::CI_Base();$this->_ci_initialize();
174                         function _ci_initialize()//在此將所有的基本類都加在為這個類的變量,使本類成為一個超級類,并且加載load類來加載視圖和模型等
175                         function _ci_scaffolding()//執(zhí)行腳手架
176      (19).如果使用了數(shù)據(jù)庫 則關(guān)閉數(shù)據(jù)庫
177 
178 
179 

如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答?。?點擊進(jìn)入論壇

發(fā)表評論 (735人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號