天天看點

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

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/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,如有問題,可以通過以下郵箱位址

[email protected]

 聯系我,非常感謝。