thinkphp學習筆記4—眼花繚亂的配置

ndblog發表於2014-06-15

 

1.配置類別

ThinkPHP提供了靈活的全域性配置功能,ThinkPHP會依次載入管理配置>專案配置>除錯配置>分組配置>擴充套件配置>動態配置,所以後面的配置許可權要大於前面的,因為後面的配置會覆蓋前面同名配置,同事會生辰配置快取檔案無需重複解析,減小開銷。

  • 慣例配置:在慣例配置內對大多數常用引數進行預設配置,因為慣例配置最先載入,優先順序別最低,如果不需要做特殊配置的話,完全可以保持預設值,慣例配置位於ThinkPHP/Conf/convention.php,內容摘抄如下:
    <?php
    /**
     * ThinkPHP慣例配置檔案
     * 該檔案請不要修改,如果要覆蓋慣例配置的值,可在應用配置檔案中設定和慣例不符的配置項
     * 配置名稱大小寫任意,系統會統一轉換成小寫
     * 所有配置引數都可以在生效前動態改變
     */
    defined(`THINK_PATH`) or exit();
    return  array(
        /* 應用設定 */
        `APP_USE_NAMESPACE`     =>  true,    // 應用類庫是否使用名稱空間
        `APP_SUB_DOMAIN_DEPLOY` =>  false,   // 是否開啟子域名部署
        `APP_SUB_DOMAIN_RULES`  =>  array(), // 子域名部署規則
        `APP_DOMAIN_SUFFIX`     =>  ``, // 域名字尾 如果是com.cn net.cn 之類的字尾必須設定    
        `ACTION_SUFFIX`         =>  ``, // 操作方法字尾
        `MULTI_MODULE`          =>  true, // 是否允許多模組 如果為false 則必須設定 DEFAULT_MODULE
        `MODULE_DENY_LIST`      =>  array(`Common`,`Runtime`),
        `CONTROLLER_LEVEL`      =>  1,
        `APP_AUTOLOAD_LAYER`    =>  `Controller,Model`, // 自動載入的應用類庫層 關閉APP_USE_NAMESPACE後有效
        `APP_AUTOLOAD_PATH`     =>  ``, // 自動載入的路徑 關閉APP_USE_NAMESPACE後有效
    
        /* Cookie設定 */
        `COOKIE_EXPIRE`         =>  0,    // Cookie有效期
        `COOKIE_DOMAIN`         =>  ``,      // Cookie有效域名
        `COOKIE_PATH`           =>  `/`,     // Cookie路徑
        `COOKIE_PREFIX`         =>  ``,      // Cookie字首 避免衝突
    
        /* 預設設定 */
        `DEFAULT_M_LAYER`       =>  `Model`, // 預設的模型層名稱
        `DEFAULT_C_LAYER`       =>  `Controller`, // 預設的控制器層名稱
        `DEFAULT_V_LAYER`       =>  `View`, // 預設的檢視層名稱
        `DEFAULT_LANG`          =>  `zh-cn`, // 預設語言
        `DEFAULT_THEME`         =>  ``,    // 預設模板主題名稱
        `DEFAULT_MODULE`        =>  `Home`,  // 預設模組
        `DEFAULT_CONTROLLER`    =>  `Index`, // 預設控制器名稱
        `DEFAULT_ACTION`        =>  `index`, // 預設操作名稱
        `DEFAULT_CHARSET`       =>  `utf-8`, // 預設輸出編碼
        `DEFAULT_TIMEZONE`      =>  `PRC`,    // 預設時區
        `DEFAULT_AJAX_RETURN`   =>  `JSON`,  // 預設AJAX 資料返回格式,可選JSON XML ...
        `DEFAULT_JSONP_HANDLER` =>  `jsonpReturn`, // 預設JSONP格式返回的處理方法
        `DEFAULT_FILTER`        =>  `htmlspecialchars`, // 預設引數過濾方法 用於I函式...
    
        /* 資料庫設定 */
        `DB_TYPE`               =>  ``,     // 資料庫型別
        `DB_HOST`               =>  ``, // 伺服器地址
        `DB_NAME`               =>  ``,          // 資料庫名
        `DB_USER`               =>  ``,      // 使用者名稱
        `DB_PWD`                =>  ``,          // 密碼
        `DB_PORT`               =>  ``,        //
        `DB_PREFIX`             =>  ``,    // 資料庫表字首
        `DB_FIELDTYPE_CHECK`    =>  false,       // 是否進行欄位型別檢查
        `DB_FIELDS_CACHE`       =>  true,        // 啟用欄位快取
        `DB_CHARSET`            =>  `utf8`,      // 資料庫編碼預設採用utf8
        `DB_DEPLOY_TYPE`        =>  0, // 資料庫部署方式:0 集中式(單一伺服器),1 分散式(主從伺服器)
        `DB_RW_SEPARATE`        =>  false,       // 資料庫讀寫是否分離 主從式有效
        `DB_MASTER_NUM`         =>  1, // 讀寫分離後 主伺服器數量
        `DB_SLAVE_NO`           =>  ``, // 指定從伺服器序號
        `DB_SQL_BUILD_CACHE`    =>  false, // 資料庫查詢的SQL建立快取
        `DB_SQL_BUILD_QUEUE`    =>  `file`,   // SQL快取佇列的快取方式 支援 file xcache和apc
        `DB_SQL_BUILD_LENGTH`   =>  20, // SQL快取的佇列長度
        `DB_SQL_LOG`            =>  false, // SQL執行日誌記錄
        `DB_BIND_PARAM`         =>  false, // 資料庫寫入資料自動引數繫結
    
        /* 資料快取設定 */
        `DATA_CACHE_TIME`       =>  0,      // 資料快取有效期 0表示永久快取
        `DATA_CACHE_COMPRESS`   =>  false,   // 資料快取是否壓縮快取
        `DATA_CACHE_CHECK`      =>  false,   // 資料快取是否校驗快取
        `DATA_CACHE_PREFIX`     =>  ``,     // 快取字首
        `DATA_CACHE_TYPE`       =>  `File`,  // 資料快取型別,支援:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
        `DATA_CACHE_PATH`       =>  TEMP_PATH,// 快取路徑設定 (僅對File方式快取有效)
        `DATA_CACHE_SUBDIR`     =>  false,    // 使用子目錄快取 (自動根據快取標識的雜湊建立子目錄)
        `DATA_PATH_LEVEL`       =>  1,        // 子目錄快取級別
    
        /* 錯誤設定 */
        `ERROR_MESSAGE`         =>  `頁面錯誤!請稍後再試~`,//錯誤顯示資訊,非除錯模式有效
        `ERROR_PAGE`            =>  ``,    // 錯誤定向頁面
        `SHOW_ERROR_MSG`        =>  false,    // 顯示錯誤資訊
        `TRACE_MAX_RECORD`      =>  100,    // 每個級別的錯誤資訊 最大記錄數
    
        /* 日誌設定 */
        `LOG_RECORD`            =>  false,   // 預設不記錄日誌
        `LOG_TYPE`              =>  `File`, // 日誌記錄型別 預設為檔案方式
        `LOG_LEVEL`             =>  `EMERG,ALERT,CRIT,ERR`,// 允許記錄的日誌級別
        `LOG_FILE_SIZE`         =>  2097152,    // 日誌檔案大小限制
        `LOG_EXCEPTION_RECORD`  =>  false,    // 是否記錄異常資訊日誌
    
        /* SESSION設定 */
        `SESSION_AUTO_START`    =>  true,    // 是否自動開啟Session
        `SESSION_OPTIONS`       =>  array(), // session 配置陣列 支援type name id path expire domain 等引數
        `SESSION_TYPE`          =>  ``, // session hander型別 預設無需設定 除非擴充套件了session hander驅動
        `SESSION_PREFIX`        =>  ``, // session 字首
        //`VAR_SESSION_ID`      =>  `session_id`,     //sessionID的提交變數
    
        /* 模板引擎設定 */
        `TMPL_CONTENT_TYPE`     =>  `text/html`, // 預設模板輸出型別
        `TMPL_ACTION_ERROR`     =>  THINK_PATH.`Tpl/dispatch_jump.tpl`, // 預設錯誤跳轉對應的模板檔案
        `TMPL_ACTION_SUCCESS`   =>  THINK_PATH.`Tpl/dispatch_jump.tpl`, // 預設成功跳轉對應的模板檔案
        `TMPL_EXCEPTION_FILE`   =>  THINK_PATH.`Tpl/think_exception.tpl`,// 異常頁面的模板檔案
        `TMPL_DETECT_THEME`     =>  false,       // 自動偵測模板主題
        `TMPL_TEMPLATE_SUFFIX`  =>  `.html`,     // 預設模板檔案字尾
        `TMPL_FILE_DEPR`        =>  `/`, //模板檔案CONTROLLER_NAME與ACTION_NAME之間的分割符
        // 佈局設定
        `TMPL_ENGINE_TYPE`      =>  `Think`,     // 預設模板引擎 以下設定僅對使用Think模板引擎有效
        `TMPL_CACHFILE_SUFFIX`  =>  `.php`,      // 預設模板快取字尾
        `TMPL_DENY_FUNC_LIST`   =>  `echo,exit`,    // 模板引擎禁用函式
        `TMPL_DENY_PHP`         =>  false, // 預設模板引擎是否禁用PHP原生程式碼
        `TMPL_L_DELIM`          =>  `{`,            // 模板引擎普通標籤開始標記
        `TMPL_R_DELIM`          =>  `}`,            // 模板引擎普通標籤結束標記
        `TMPL_VAR_IDENTIFY`     =>  `array`,     // 模板變數識別。留空自動判斷,引數為`obj`則表示物件
        `TMPL_STRIP_SPACE`      =>  true,       // 是否去除模板檔案裡面的html空格與換行
        `TMPL_CACHE_ON`         =>  true,        // 是否開啟模板編譯快取,設為false則每次都會重新編譯
        `TMPL_CACHE_PREFIX`     =>  ``,         // 模板快取字首標識,可以動態改變
        `TMPL_CACHE_TIME`       =>  0,         // 模板快取有效期 0 為永久,(以數字為值,單位:秒)
        `TMPL_LAYOUT_ITEM`      =>  `{__CONTENT__}`, // 佈局模板的內容替換標識
        `LAYOUT_ON`             =>  false, // 是否啟用佈局
        `LAYOUT_NAME`           =>  `layout`, // 當前佈局名稱 預設為layout
    
        // Think模板引擎標籤庫相關設定
        `TAGLIB_BEGIN`          =>  `<`,  // 標籤庫標籤開始標記
        `TAGLIB_END`            =>  `>`,  // 標籤庫標籤結束標記
        `TAGLIB_LOAD`           =>  true, // 是否使用內建標籤庫之外的其它標籤庫,預設自動檢測
        `TAGLIB_BUILD_IN`       =>  `cx`, // 內建標籤庫名稱(標籤使用不必指定標籤庫名稱),以逗號分隔 注意解析順序
        `TAGLIB_PRE_LOAD`       =>  ``,   // 需要額外載入的標籤庫(須指定標籤庫名稱),多個以逗號分隔 
        
        /* URL設定 */
        `URL_CASE_INSENSITIVE`  =>  true,   // 預設false 表示URL區分大小寫 true則表示不區分大小寫
        `URL_MODEL`             =>  1,       // URL訪問模式,可選引數0、1、2、3,代表以下四種模式:
        // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE  模式); 3 (相容模式)  預設為PATHINFO 模式
        `URL_PATHINFO_DEPR`     =>  `/`,    // PATHINFO模式下,各引數之間的分割符號
        `URL_PATHINFO_FETCH`    =>  `ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL`, // 用於相容判斷PATH_INFO 引數的SERVER替代變數列表
        `URL_REQUEST_URI`       =>  `REQUEST_URI`, // 獲取當前頁面地址的系統變數 預設為REQUEST_URI
        `URL_HTML_SUFFIX`       =>  `html`,  // URL偽靜態字尾設定
        `URL_DENY_SUFFIX`       =>  `ico|png|gif|jpg`, // URL禁止訪問的字尾設定
        `URL_PARAMS_BIND`       =>  true, // URL變數繫結到Action方法引數
        `URL_PARAMS_BIND_TYPE`  =>  0, // URL變數繫結的型別 0 按變數名繫結 1 按變數順序繫結
        `URL_404_REDIRECT`      =>  ``, // 404 跳轉頁面 部署模式有效
        `URL_ROUTER_ON`         =>  false,   // 是否開啟URL路由
        `URL_ROUTE_RULES`       =>  array(), // 預設路由規則 針對模組
        `URL_MAP_RULES`         =>  array(), // URL對映定義規則
    
        /* 系統變數名稱設定 */
        `VAR_MODULE`            =>  `m`,     // 預設模組獲取變數
        `VAR_CONTROLLER`        =>  `c`,    // 預設控制器獲取變數
        `VAR_ACTION`            =>  `a`,    // 預設操作獲取變數
        `VAR_AJAX_SUBMIT`       =>  `ajax`,  // 預設的AJAX提交變數
        `VAR_JSONP_HANDLER`     =>  `callback`,
        `VAR_PATHINFO`          =>  `s`,    // 相容模式PATHINFO獲取變數例如 ?s=/module/action/id/1 後面的引數取決於URL_PATHINFO_DEPR
        `VAR_TEMPLATE`          =>  `t`,    // 預設模板切換變數
    
        `HTTP_CACHE_CONTROL`    =>  `private`,  // 網頁快取控制
        `CHECK_APP_DIR`         =>  true,       // 是否檢查應用目錄是否建立
        `FILE_UPLOAD_TYPE`      =>  `Local`,    // 檔案上傳方式
        `DATA_CRYPT_TYPE`       =>  `Think`,    // 資料加密方式
    
    );


  • 應用配置:呼叫所有模組之前載入的公共配置檔案,位於Application/Common/Conf/config.php,注意如果修改公共模組的名稱,公共配置檔案的位置也要相應改變,應用配置裡沒有什麼內容,需要自己新增,如下:
    <?php
    return array(
        //`配置項`=>`配置值`
    );
  • 模式配置:如果使用普通應用模式之外的應用模式,可以為應用模式單獨新增配置檔案,檔案存放的位置和命名規則如下:Application/Common/Conf/config_應用模式名稱.php,注意模式配置僅僅在執行模式下才會載入
  • 除錯配置:如果開啟除錯模式的話,則會自動載入框架的除錯配置檔案和應用除錯配置檔案,他們的位置分別位於ThinkPHP/Conf/debug.php,Application/Common/Conf/debug.php
  • 狀態配置:每個應用可以在不同的情況下設定自己的狀態,也可稱之為應用場景,如果我們要區分開發環境和測試環境,在入口檔案中定義define(`APP_STATUS`,`development`);那麼會載入對應的配置檔案Application/Common/Conf/development.php,如果在入口檔案中修改為define(`APP_STATUS`,`test`);那麼會載入對應的配置檔案Application/Common/Conf/test.php
  • 模組配置:每個模組會載入自己的配置檔案,和模組放在相同目錄下,例如:Application/當前模組名/Conf/config.php,如果使用了普通模式之外的其他應用模式,還可以為應用模式單獨定義配置檔案,名稱和存放目錄如:Application/當前模組名/Conf/config_應用模式名稱.php,注意這個僅在執行模式下才會載入,模組配置檔案是可選的。

    如果應用的配置檔案比較大,想分成幾個單獨的配置檔案或者載入額外的配置檔案可以使用擴充套件配置和動態配置。

2.讀取配置

ThinkPHP使用C方法來讀取配置節點,就是Config的意思,注意配置項的引數不區分大小寫,C(`URL_MODEL`)和C(`url_model`)得到的結果是一樣的,但是還是建議區分大小寫。配置引數名字不能使用“.”,因為這個是用來讀取二維引數的,如果沒有配置則返回NULL。讀取二維引數值的方法如下:C(`USER_CONFIG.USER_TYPE`);

3.動態配置

可以預先寫好配置引數,也可以在方法中動態設定,也是使用C方法,例如:C(`引數名稱`,`新的引數值`);動態配置僅僅對當前請求有效,對其他的請求無效。注意到動態配置的方法和讀取配置的方法是一樣的,只不過多了一個引數而已。

4.擴充套件配置

擴充套件配置可以自動載入額外的自定義配置檔案,配置格式和專案配置的格式一樣,設定擴充套件配置的方式如下:

// 載入擴充套件配置檔案
`LOAD_EXT_CONFIG` => `user,db`,

 

 

 

 

 

 

作者:Tyler Ning

出處:http://www.cnblogs.com/tylerdonet/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,如有問題,可以通過以下郵箱地址williamningdong@gmail.com
 聯絡我,非常感謝。


相關文章