天天看点

PHP扩展 -- php7的Yaconf扩展

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文件).
           
php