php7的Yaconf扩展
http://www.laruence.com/2015/06/12/3051.html
环境
php7+
作用:
1、管理和加载服务器上所有项目的配置文件.
2、使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起.
3、它在PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件.
4、最重要的, 配置目录和代码分离以后, 可以借助一个配置管理后台, 来实现配置的统一化管理.
5、它支持(对于非ZTS)配置变更重新加载, 也就是说配置如果有变化(建议更改配置一定使用mv, 不要使用cp), 它会reload, 不需要重启(检测的频率由yaconf.check_delay控制).
6、它支持丰富的配置类型, 包括字符串, 数组, 分节, 分节继承, 并且还可以在配置中直接写PHP的常量和环境变量等.
安装:
pecl install yaconf
mkdir /mydata/data/config
vi /etc/php.ini
extension=yaconf.so
yaconf.directory=/mydata/data/easyswoole/Config
yaconf.check_delay=1
// 如果使用php-fpm来调度的话
systemctl restart php-fpm.service
pe -ef |grep php
php -m
API
Yaconf 只提供了俩个方法,
mixed Yaconf::get(string $name, mixed $default = NULL)
这个是获取一个配置, 名字是配置的名字, 一般来说如果你有一个ini文件叫做foo.ini, 那么$name使用foo的话就会获取到这个文件内的所有内容, 以数组形式返回. default是当配置不存在的时候返回的默认值.
bool Yaconf::has(string $name)
这个是检测一个配置是否存在.
Yaconf的配置项
yaconf.directory
配置文件目录, 这个配置不能通过ini_set指定, 因为必须在PHP启动的时候就确定好.
yaconf.check_delay
多久(秒)检测一次文件变动, 如果是0就是不检测, 也就是说如果是0的时候, 文件变更只能通过重启PHP重新加载
配置的格式
Yaconf采用ini文件作为配置文件, 这是因为我一直觉得ini是最适合做配置文件的, key-value格式, 清晰可读.
简单的配置写起来如下(以下全部假设ini文件的名字是test):
foo="bar"
phpversion=PHP_VERSION
env=${HOME}
如上所示, 对于一般的配置我们都用引号引起来. 而对于没有引起来的, 会尝试以PHP的常量做解释, 也就是说我们可以直接在配置里面写PHP的常量.
另外你也看到了, 我们可以直接在配置中写环境变量, 比如上面的env:
Yaconf::get("test.env");
Yaconf::get("test.foo");
Yaconf也支持数组类型的配置, 写法如下:
arr[]=1
arr.1=2
Yaconf::get("test.arr.1");
Yaconf也支持map类型的配置, 写法如下:
map.foo=bar
map.bar=foo
;你可以使用分号来写注释
map2.foo.name=yaconf
map2.foo.year=2015
Yaconf::get("test.map2.foo.name");
样例
首先, 假设我们的所有的配置文件都放置在/tmp/yaconf中, 那么我们就需要在php.ini中增加如下配置:
yaconf.directory=/tmp/yaconf
这样yaconf在PHP启动的时候, 就会在这个目录下找所有的*.ini文件, 然后尝试处理他们. 这里要注意的是不支持多级目录, 也就是说, yaconf只会处理yaconf.directory内的*.ini文件, 不会处理子目录里面的(这主要是为了简单考虑, 因为有分节, 你就可以一个项目定义一个ini文件).