ThinkPHP3.0啟動過程

來源:互聯網
上載者:User

標籤: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啟動過程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.