这个是鸟哥开发的一个管理配置文件的php插件
地址:http://www.laruence.com/2015/06/12/3051.html
介绍,直接哪来点用吧,反正自己体会就好了
项目地址
代码已经提交到了Github: https://github.com/laruence/yaconf , 欢迎大家提交Issue
简介
首先说说, 这个是干啥的.
1. 我见过很多的项目中, 用PHP文件做配置的, 一个config目录下可能有十几个甚至数十个.php配置文件, 里面都是各种各样的array, 还有甚者会把一些词典文件(比如中文/英文对照)也放到配置中去. 这就导致配置文件的解析耗费了很大的性能(诚然, 用了opcache能好点, 但是实际上还是有执行的过程).
2. 除了PHP的, 还有用json的, yaml的, 一个共同的特点就是这些配置的可读性比较差. 另外, 他们也都要runtime解析.
3. config目录往往和代码在一起, 首先会有安全隐患(配置中往往有敏感信息), 其次如果配置和代码属于一个项目, 这就会导致配置的修改也要走代码上线的流程.
4. 一些资源配置文件, 比如mysql/memcache的配置信息, 这些内容本来是应该对开发透明的, 运维直接负责即可. 但是放到了代码中就会导致, 运维如果要发起一些变更, 也要开发配合修改配置文件上线.
所以, Yaconf就是为了解决这些问题而生的一个工具.
1. 它使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起.
2. 它在PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件.
3. 所有的配置内容都是immutable的, 这就可以借助于Fork的COW, 降低内存占用, 并且在访问配置的时候, 几乎不需要任何的内存Copy, 也不会有无谓的引用计数增减
4. 最重要的, 配置目录和代码分离以后, 可以借助一个配置管理后台, 来实现配置的统一化管理.
5. 它支持(对于非ZTS)配置变更重新加载, 也就是说配置如果有变化(建议更改配置一定使用mv, 不要使用cp), 它会reload, 不需要重启(检测的频率由yaconf.check_delay控制).
6. 它支持丰富的配置类型, 包括字符串, 数组, 分节, 分节继承, 并且还可以在配置中直接写PHP的常量和环境变量等.
7. 最重要的是, 它很简单.
我就说下安装过程吧:
好吧,人家说的挺清楚的,推荐使用
安装
在Linux中编译Yaconf
Yaconf是PECL扩展,因此您可以通过以下方式简单地安装它:
$pecl install yaconf
或者您可以自己编译:
$ /path/to/php7/bin/phpize
$ ./configure --with-php-config=/path/to/php7/bin/php-config
$ make && make install
运行时配置
yaconf.directory
Path to directory which all ini configuration files are placed in
yaconf.check_delay
In which interval Yaconf will detect ini file's change(by directory's mtime),
if it is set to zero, you have to restart php to reloading configurations.
蜜蜂
混合Yaconf :: get(字符串$ name,mixed $ default = NULL)
bool Yaconf :: has(string $ name)
例
目录
假设我们将所有配置文件放在/ tmp / yaconf /中,因此我们将其添加到php.ini中
yaconf.directory=/tmp/yaconf
INI文件
假设/ tmp / yaconf中有两个文件
foo.ini
name = “ yaconf ”
year = 2015
features [] = “ fast ”
features.1 = “ light ”
features.plus = “ zero-copy ”
features.constant = PHP_VERSION
features.env = $ {HOME}
和bar.ini
[base]
parent = “ yaconf ”
children = “ NULL ”
[孩子:基地]
孩子 = “集”
跑
让我们访问配置
foo.ini
PHP7 - [R '的var_dump(Yaconf ::获得( “富”)); '
/ *
array(3){
[“name”] =>
string(6)“yaconf”
[“year”] =>
string(4)“2015”
[“features”] =>
array(5){
[0 ] =>
string(4)“fast”
[1] =>
string(5)“light”
[“plus”] =>
string(9)“zero-copy”
[“constant”] =>
string(9)“ 7.0.0-dev“
[”env“] =>
string(16)”/ home / huixinchen“
}
}
* /
如您所见,Yaconf支持字符串,映射(数组),ini,env变量和PHP常量。
您还可以访问以下配置:
PHP7 - [R '的var_dump(Yaconf ::获得( “foo.name”)); '
// string(6)“yaconf”
PHP7 - [R '的var_dump(Yaconf ::获得( “foo.features.1”)); '
// string(5)“light”
PHP7 - [R '的var_dump(Yaconf ::获得( “foo.features”) “加”]); '
// string(9)“零拷贝”
bar.ini
现在让我们看看继承的部分和部分:
PHP7 - [R '的var_dump(Yaconf ::获得( “酒吧”)); '
/ *
array(2){
[“base”] =>
array(2){
[“parent”] =>
string(6)“yaconf”
[“children”] =>
string(4)“NULL”
}
[ “children”] =>
array(2){
[“parent”] =>
string(6)“yaconf”
[“children”] =>
string(3)“set”
}
}
* /
子部分在基本部分中继承了值,子部分能够覆盖他们想要的值。