以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入口檔案中重新定義 所有路徑常量都必須以/ 結尾
定義常量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