標籤:blog http io ar 使用 sp for 檔案 on
以Blog舉例
載入項目入口檔案
D:\wamp\www\Examples\Blog\index.php
定義常量
APP_NAME,Blog
APP_PATH,D:\wamp\www\Examples\Blog\ (APP_PATH為項目核心架構結構檔案(lib)所在目錄)
載入ThinkPHP架構入口檔案
D:\wamp\www\ThinkPHP\ThinkPHP.php
記錄開始已耗用時間,記錄記憶體使用量情況
檢查項目是否定義常量APP_PATH,(如果沒有定義為目錄D:\wamp\www\ThinkPHP\)
根據APP_PATH定義常量RUNTIME_PATH,D:\wamp\www\Examples\Blog\Runtime\
檢查項目是否定義常量APP_DEBUG,false (如果沒有定義為false)
檢查項目是否定義常量MODE_NAME,~runtime.php (如果沒有定義為~runtime.php)
定義常量RUNTIME_FILE,D:\wamp\www\Examples\Blog\Runtime\~runtime.php
如果非調試並存在RUNTIME_FILE,直接載入D:\wamp\www\Examples\Blog\Runtime\~runtime.php
如果現在還沒有這個檔案
定義常量THINK_PATH,D:\wamp\www\ThinkPHP\ThinkPHP\
載入運行時檔案
D:\wamp\www\ThinkPHP\ThinkPHP\Common\runtime.php
檢查是否定義常量THINK_PATH,沒定義就終止程式
檢查PHP版本,如果小於5.2.0終止程式執行
定義常量THINK_VERSION,3.0
定義常量THINK_RELEASE,20120323
根據PHP版本設定魔術引號
定義常量MAGIC_QUOTES_GPC,False
定義常量IS_CGI,0
定義常量IS_WIN,1
定義常量IS_CLI,0
檢查是否定義APP_NAME
PHP非CLI模式下
定義常量_PHP_FILE_,/Examples/Blog/index.php
定義常量__ROOT__,/Examples
定義常量URL_COMMON, 0
定義常量URL_PATHINFO, 1
定義常量URL_REWRITE, 2
定義常量URL_COMPAT, 3
路徑設定 可在項目或者THINKPHP入口檔案中重新定義 所有路徑常量都必須以/ 結尾
定義常量CORE_PATH, D:\wamp\www\ThinkPHP/Lib/
定義常量EXTEND_PATH, D:\wamp\www\ThinkPHP/Extend/
定義常量MODE_PATH, D:\wamp\www\ThinkPHP/Extend/Mode/
定義常量ENGINE_PATH, D:\wamp\www\ThinkPHP/Extend/Engine/
定義常量VENDOR_PATH, D:\wamp\www\ThinkPHP/Extend/Vendor/
定義常量LIBRARY_PATH,D:\wamp\www\ThinkPHP/Extend/Library/
定義常量COMMON_PATH, D:\wamp\www\Examples\Blog\Common/
定義常量LIB_PATH, D:\wamp\www\Examples\Blog\Lib/
定義常量CONF_PATH, D:\wamp\www\Examples\Blog\Conf/
定義常量LANG_PATH, D:\wamp\www\Examples\Blog\Lang/
定義常量TMPL_PATH, D:\wamp\www\Examples\Blog\Tpl/
定義常量HTML_PATH, D:\wamp\www\Examples\Blog\Html/
定義常量LOG_PATH, D:\wamp\www\Examples\Blog\Runtime/Logs/
定義常量TEMP_PATH, D:\wamp\www\Examples\Blog\Runtime/Temp/
定義常量DATA_PATH, D:\wamp\www\Examples\Blog\Runtime/Data/
定義常量CACHE_PATH, D:\wamp\www\Examples\Blog\Runtime/Cache/
設定VENDOR_PATH目錄到include_path
定義初始化方法,build_app_dir,build_first_action,build_runtime_cache,build_tags_cache,check_runtime,load_runtime_file
調用load_runtime_file方法
載入基礎函數檔案common.php,D:\wamp\www\ThinkPHP\Common/common.php
載入核心編譯檔案
D:\wamp\www\ThinkPHP/Lib/Core/Think.class.php
D:\wamp\www\ThinkPHP/Lib/Core/ThinkException.class.php
D:\wamp\www\ThinkPHP/Lib/Core/Behavior.class.php
把別名設定檔匯入別名靜態變數$_alias,別名設定檔為D:\wamp\www\ThinkPHP\Conf/alias.php
如果目錄D:\wamp\www\Examples\Blog\Lib/不存在,建立預設專案檔結構及config.php和IndexAction.class.php檔案
如果存在就檢查項目的緩衝目錄D:\wamp\www\Examples\Blog\Runtime/Cache/。不存在就建立預設檔案結構。
如果是偵錯模式,刪除RUNTIME_FILE定義的檔案
記錄負載檔案時間
執行Think::Start()
該方法在核心檔案D:\wamp\www\ThinkPHP/Lib/Core/Think.class.php類裡
設定錯誤和異常處理,appError,appException
註冊AUTOLOAD方法,autoload
執行Think::builApp方法
把慣例設定檔匯入配置靜態變數$_config,慣例設定檔為D:\wamp\www\ThinkPHP\Conf/convention.php
如果定義常量MODE_NAME,則到D:\wamp\www\ThinkPHP/Extend/Mode/目錄下匯入對應的模式設定檔到變數$mode
如果模式配置設定檔有config項,就匯入到配置靜態變數$_config
把項目配置設定檔D:\wamp\www\Examples\Blog\Conf/config.php匯入配置靜態變數$_config
載入頂層語言套件D:\wamp\www\ThinkPHP\Lang\zh-cn.php到語言靜態變數$_lang
系統行為定義如下:
如果靜態組態變數中有APP_TAGS_ON,並且為true,載入變數$mode的extends項到配置靜態變數$_config的extends下,變數$mode沒有extends項,
把系統配置下的tags.php匯入到配置靜態變數$_config的extends下,D:\wamp\www\ThinkPHP\Conf/tags.php
項目行為定義如下:
載入變數$mode的extends項到配置靜態變數$_config的tags下,變數$mode沒有tags項,
把項目配置下的tags.php匯入到配置靜態變數$_config的tags下,D:\wamp\www\Examples\Blog\Conf/tags.php
讀取核心編譯檔案如下:
如果變數$mode定義core,核心檔案為該項,如果沒有定義,核心檔案則為
D:\wamp\www\ThinkPHP\Common/functions.php
D:\wamp\www\ThinkPHP/Lib/Core/Log.class.php
D:\wamp\www\ThinkPHP/Lib/Core/Dispatcher.class.php
D:\wamp\www\ThinkPHP/Lib/Core/App.class.php
D:\wamp\www\ThinkPHP/Lib/Core/Action.class.php
D:\wamp\www\ThinkPHP/Lib/Core/View.class.php
把項目核心配置定義D:\wamp\www\Examples\Blog\Conf/core.php的數組及以上檔案儲存到變數$list
依次載入核心檔案
非偵錯模式時把這些核心檔案寫入變數$compile
附加元件目公用檔案D:\wamp\www\Examples\Blog\Common/common.php
非偵錯模式時把項目公用檔案寫入變數$compile
把變數$mode的alias項匯入別名靜態變數$_alias
非偵錯模式時把變數$mode的alias項寫入變數$compile
把項目別名檔案匯入別名靜態變數$_alias,D:\wamp\www\Examples\Blog\Conf/alias.php
非偵錯模式時把項目別名檔案的alias項寫入變數$compile
如果是調試環境,
把系統調試設定檔匯入配置靜態變數$_config,D:\wamp\www\ThinkPHP\ThinkPHP\Conf/debug.php
取出APP_STATUS配置,附加元件目配置調試設定檔 D:\wamp\www\Examples\Blog\Conf/$status.php
如果非偵錯模式,調用build_runtime_cache函數產生編譯檔案
基本上將語言套件,配置,別名,核心函數,defined變數,D:\wamp\www\ThinkPHP/Lib/Behavior/裡的由extends定義的類,產生一個檔案~runtime.php
執行APP::run方法
根據extends和tags記錄的app_init項,執行個體化行為
設定時區
如果配置靜態變數$_config有LOAD_EXT_FILE項,則動態在D:\wamp\www\Examples\Blog\Common/目錄下負載檔案
如果配置靜態變數$_config有LOAD_EXT_CONFIG項,則動態在D:\wamp\www\Examples\Blog\Conf/目錄下負載檔案到靜態變數$_config
執行Dispatcher::dispatch方法
這裡代碼太多~~~不好理解
如果定了分組,根據分組載入配置和函數
定義模板相關常量
根據extends和tags記錄的app_begin項,執行個體化行為
根據配置靜態變數$_config的SESSION_OPTIONS項session初始化
根據SESSION_TYPE到D:\wamp\www\ThinkPHP/Extend/Driver\Session/目錄下載入對應的類並執行個體化,執行執行個體的execute方法
記錄應用初始化時間
執行mvc流程,
涉及__hack_module方法和Empty模組
執行action_name行為
執行該模組對應動作的_before_action方法
執行模組對應動作
執行該模組對應動作的_after_action方法
根據extends和tags記錄的app_end項,執行個體化行為
儲存日誌記錄
附錄:
自動載入
先從別名靜態組態變數$_alias裡尋找,如果有直接載入
如果是Behavior類,從D:\wamp\www\ThinkPHP/Lib/Behavior/目錄,D:\wamp\www\ThinkPHP/Extend/Behavior/目錄,D:\wamp\www\Examples\Blog\Lib/Behavior/,模式目錄的/Behavior/目錄尋找
如果是Model類,從D:\wamp\www\Examples\Blog\Lib/Model/目錄,D:\wamp\www\ThinkPHP/Extend/Model/目錄尋找
如果是Action類,從D:\wamp\www\Examples\Blog\Lib/Action/目錄,D:\wamp\www\ThinkPHP/Extend/Action/目錄尋找
根據配置靜態變數$_config的APP_AUTOLAOD_PATH項自動載入
設定檔順序
系統別名 alias.php
系統慣例 convention.php
系統模式設定檔 例如cli.php
項目設定檔 config.php
語言套件檔案 zh-cn.php
系統行為檔案 tags.php
項目行為檔案 tags.php
項目核心配置 core.php
項目別名 alias.php
系統調試設定檔 debug.php
項目調試配置,$status.php
ThinkPHP3.0啟動過程