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 配置文件
useTFPHPDatabaseSQLTFDO;
useTFPHPSystemTFLog;
useTFPHPSystemTFConfig;
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/>
<ahref="{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/>
<ahref="{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/>
<ahref="{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/>
<ahref="{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文档更加独立,可读性更好。