1. 介紹
1.1 介紹
福哥的TFUMS項目的配置文件其實就是一個PHP程序文件,使用PHP程序文件作為項目的配置文件雖然更加靈活,但是感覺上差一點。
Java項目使用XML作為項目的配置文件,XML格式可以容納更復雜的配置參數,閱讀起來也很清晰,但是PHP讀取XML格式的文檔有點先天不足,XML格式無法轉換為PHP的數組,而且PHP解析XML格式的效率也不高。
PHP語言解析器的配置文件是INI格式的文件,INI格式不如XML格式可以適應更為復雜的配置參數,但是它也足夠使用了,最關鍵是的PHP解析INI格式非常的方便,一個parse_ini_file函數便可以將INI文檔里面的配置參數轉換為一個PHP的數組,由于是內建函數效率還有保障,就是它了~~
2. PHP格式配置文件
福哥先給出現在的TFUMS項目的配置文件,這是一個標準的PHP程序文件,里面通過TFConfig對象設置項目參數。
2.1 配置文件
use TFPHPDatabaseSQLTFDO;
use TFPHPSystemTFLog;
use TFPHPSystemTFConfig;
TFConfig::set("default", array(
'driver'=>TFDO::T_MYSQL,
'host'=>"mysql",
'port'=>3306,
'user'=>"tfums",
'pass'=>"abcdef",
'db'=>"tfums",
'charset'=>"utf8",
), "TFDO");
TFConfig::set("default", array(
'host'=>"redis",
'port'=>6379,
'pass'=>"tongfu.net",
'db'=>"tfums",
), "TFRedis");
TFConfig::set("default", array(
'host'=>"elasticsearch",
'port'=>9200,
'db'=>"tfums"
), "TFElasticsearch");
TFConfig::set("charset", "UTF-8", "system");
TFConfig::set("domain", "192.168.1.168", "system");
TFConfig::set("apiUrl", "http://php-nginx-tfums/api/", "system");
TFConfig::set("outUrl", "http://192.168.1.168/tfums/", "system");
TFConfig::set("baseUri", "/", "system");
TFConfig::set("systemLogLevel", TFLog::T_INFO, "system");
TFConfig::set("projectAESPK", md5("福哥的TFUMS系統基于TFPHP框架"), "system");
TFConfig::set("SMTPArgs", array(
'host'=>"smtp.tongfu.net",
'port'=>25,
'user'=>"tfums@tongfu.net",
'pwd'=>"cba321",
'email'=>"tfums@tongfu.net"
), "system");
TFConfig::set("imageDirArgs", array(
"dirs"=>array(
"img3"=>array(
"path"=>"/tongfu.net/web/TFHomeImg3/",
"requestUri"=>"/img3/"
)
),
"default"=>"img3"
), "system");
TFConfig::set("defaultUserImages", array(
'icon'=>"/images/usericon.jpg",
'style'=>"/images/userstyle.jpg",
), "system");
TFConfig::set("bindEmailTemplateArgs", array(
'subject'=>"親愛的{userName},請激活你的TFUMS系統賬號的綁定郵箱",
'body'=>"親愛的{userName},你好!<br/>
<br/>
請點擊下面的鏈接完成郵箱綁定操作!<br/><br/>
<a href="{link}" target="_blank">{link}</a><br/>
<br/>
TFUMS<br/>
tfums@tongfu.net<br/>"
), "system");
2.2 數據源
這個里面有三個數據源,分別是MySQL數據源、Redis數據源和ES數據源,它是一個數組形式。
TFConfig::set("default", array(
'driver'=>TFDO::T_MYSQL,
'host'=>"mysql",
'port'=>3306,
'user'=>"tfums",
'pass'=>"abcdef",
'db'=>"tfums",
'charset'=>"utf8",
), "TFDO");
TFConfig::set("default", array(
'host'=>"redis",
'port'=>6379,
'pass'=>"tongfu.net",
'db'=>"tfums",
), "TFRedis");
TFConfig::set("default", array(
'host'=>"elasticsearch",
'port'=>9200,
'db'=>"tfums"
), "TFElasticsearch");
2.3 環境參數
這里是一個系統環境參數,都是一些簡單字符串參數。
TFConfig::set("charset", "UTF-8", "system");
TFConfig::set("domain", "192.168.1.168", "system");
TFConfig::set("apiUrl", "http://php-nginx-tfums/api/", "system");
TFConfig::set("outUrl", "http://192.168.1.168/tfums/", "system");
TFConfig::set("baseUri", "/", "system");
TFConfig::set("systemLogLevel", TFLog::T_INFO, "system");
TFConfig::set("projectAESPK", md5("福哥的TFUMS系統基于TFPHP框架"), "system");
2.4 功能參數
功能參數針對的一些系統功能的參數,一般情況下都是數組類型的參數,甚至還會有多級參數。
TFConfig::set("SMTPArgs", array(
'host'=>"smtp.tongfu.net",
'port'=>25,
'user'=>"tfums@tongfu.net",
'pwd'=>"cba321",
'email'=>"tfums@tongfu.net"
), "system");
TFConfig::set("imageDirArgs", array(
"dirs"=>array(
"img3"=>array(
"path"=>"/tongfu.net/web/TFHomeImg3/",
"requestUri"=>"/img3/"
)
),
"default"=>"img3"
), "system");
TFConfig::set("defaultUserImages", array(
'icon'=>"/images/usericon.jpg",
'style'=>"/images/userstyle.jpg",
), "system");
TFConfig::set("bindEmailTemplateArgs", array(
'subject'=>"親愛的{userName},請激活你的TFUMS系統賬號的綁定郵箱",
'body'=>"親愛的{userName},你好!<br/>
<br/>
請點擊下面的鏈接完成郵箱綁定操作!<br/><br/>
<a href="{link}" target="_blank">{link}</a><br/>
<br/>
TFUMS<br/>
tfums@tongfu.net<br/>"
), "system");
3. INI格式配置文件
INI格式雖然也可以通過section和key、value實現一個二維數組的結構,但是INI格式畢竟沒有PHP語言那樣的自由。所以福哥要將TFUMS項目的配置文件轉換為INI格式需要一些技巧。
3.1 配置文件
[TFDO]
default[driver] = MySQL
default[host] = mysql
default[port] = 3306
default[user] = root
default[pass] = abcdef
default[db] = tfums
default[charset] = utf8
[TFRedis]
default[host] = redis
default[port] = 6379
default[pass] = tongfu.net
default[db] = tfums
[TFElasticsearch]
default[host] = elasticsearch
default[port] = 9200
default[db] = tfums
[system]
charset = UTF-8
domain = 192.168.1.168
apiUrl = http://php-nginx-tfums/api/
outUrl = http://192.168.1.168/tfums/
baseUri = /
systemLogLevel = info
projectAESPK = 86fbd7cec5a89700760c167e85acdab8
imageDirsPath[img3] = /tongfu.net/web/TFHomeImg3/
imageDirsRequestURI[img3] = /img3/
imageDirDefault = img3
SMTP[host] = smtp.tongfu.net
SMTP[port] = 25
SMTP[user] = tfums@tongfu.net
SMTP[pwd] = cba321
SMTP[email] = tfums@tongfu.net
defaultUserImages[icon] = /images/usericon.jpg
defaultUserImages[style] = /images/userstyle.jpg
bindEmailTemplate[subject] = 親愛的{userName},請激活你的TFUMS系統賬號的綁定郵箱
bindEmailTemplate[body] = "親愛的{userName},你好!<br/>
<br/>
請點擊下面的鏈接完成郵箱綁定操作!<br/><br/>
<a href="{link}" target="_blank">{link}</a><br/>
<br/>
tfums<br/>
tfums@tongfu.net<br/>"
3.2 數據源
INI文檔可以通過section和key實現一個二維數組結構,這個和PHP的group+數組格式相符合,沒有問題!
INI文檔的key也可以用方括號設置數組格式,parse_ini_file函數會把它轉換成一個數組參數。
[TFDO]
default[driver] = MySQL
default[host] = mysql
default[port] = 3306
default[user] = root
default[pass] = abcdef
default[db] = tfums
default[charset] = utf8
[TFRedis]
default[host] = redis
default[port] = 6379
default[pass] = tongfu.net
default[db] = tfums
[TFElasticsearch]
default[host] = elasticsearch
default[port] = 9200
default[db] = tfums
3.3 環境參數
環境參數大多數參數都是一個字符串,可以直接設置。還有imageDirArgs是一個多為數組,這個INI格式搞不定了。
福哥的解決方法是將多維數組拆開為多個參數,當然相應的項目里的程序也要做改動才行。
charset = UTF-8
domain = 192.168.1.168
apiUrl = http://php-nginx-tfums/api/
outUrl = http://192.168.1.168/tfums/
baseUri = /
systemLogLevel = info
projectAESPK = 86fbd7cec5a89700760c167e85acdab8
imageDirArgsPath[img3] = /tongfu.net/web/TFHomeImg3/
imageDirArgsRequestURI[img3] = /img3/
imageDirArgsDefault = img3
3.4 功能參數
功能參數都是一個一個的數組,這個也可以直接轉換過來。
這里面有一個特殊的情況,就是郵件模板的正文的一個多行字符串,這個需要用雙引號括起來才行,而且內容里面的雙引號需要轉義一下。
SMTP[host] = smtp.tongfu.net
SMTP[port] = 25
SMTP[user] = tfums@tongfu.net
SMTP[pwd] = cba321
SMTP[email] = tfums@tongfu.net
defaultUserImages[icon] = /images/usericon.jpg
defaultUserImages[style] = /images/userstyle.jpg
bindEmailTemplate[subject] = 親愛的{userName},請激活你的TFUMS系統賬號的綁定郵箱
bindEmailTemplate[body] = "親愛的{userName},你好!<br/>
<br/>
請點擊下面的鏈接完成郵箱綁定操作!<br/><br/>
<a href="{link}" target="_blank">{link}</a><br/>
<br/>
tfums<br/>
tfums@tongfu.net<br/>"
3.5 INI轉PHP數組
這個比較簡單,就是一行代碼的事情。
$webIniArr = parse_ini_file(WEB_INF_ROOT_PATH. 'Conf/web.ini', true);
轉換后的PHP數組是這樣的結構。




4. 總結
今天福哥帶著童鞋們將TFUMS項目的配置文件從一個PHP格式的程序文件改造成了INI格式的文檔,使用INI文檔后的配置文件看起來更加像一個配置文件了,INI文檔更加獨立,可讀性更好。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。