简介
Yaconf 是一个高性能的配置管理扩展,是由PHP核心开发者鸟哥惠新宸发布的 PHP7 下的扩展应用。主要目标是简化读取项目配置文件, 使配置文件和项目代码分离,增强了配置文件的可读性和可维护性。
据 Yaconf 开发者惠新宸在其博客上说,这个项目是其在来微博以后, 第一个优化项目中顺手做的一个小工具, 本身叫做Weibo_Conf. 但是因为 Weibo_Conf 是属于 Weibo 扩展的, 里面还有一些其他功能是专门为 Weibo 定制的. 所以不适合直接开源.随着 PHP7 的发布, 新增了很多持久化类型的支持比如 IS_IMMUTABLE_ARRAY , 于是就在 PHP7 下重新开发了 Yaconf , 开源出来, 方便大家使用。
鸟哥已经将其放在GitHub上:https://github.com/laruence/yaconf
安装
直接使用PECL安装扩展
$pecl install yaconf
也可以编译安装
$ /path/to/php7/bin/phpize
$ ./configure --with-php-config=/path/to/php7/bin/php-config
$ make && make install
PHP7.3安装错误
/tmp/pear/temp/yaconf/yaconf.c: 在函数‘php_yaconf_hash_init’中:
/tmp/pear/temp/yaconf/yaconf.c:90:15: 错误:赋值运算的左操作数必须是左值
GC_FLAGS(ht) |= IS_ARRAY_IMMUTABLE;
^
/tmp/pear/temp/yaconf/yaconf.c:91:15: 错误:赋值运算的左操作数必须是左值
GC_FLAGS(ht) |= HASH_FLAG_STATIC_KEYS;
^
/tmp/pear/temp/yaconf/yaconf.c:95:19: 错误:‘HASH_FLAG_APPLY_PROTECTION’未声明(在此函数内第一次使用)
GC_FLAGS(ht) &= ~HASH_FLAG_APPLY_PROTECTION;
^
/tmp/pear/temp/yaconf/yaconf.c:95:19: 附注:每个未声明的标识符在其出现的函数内只报告一次
/tmp/pear/temp/yaconf/yaconf.c:98:18: 错误:赋值运算的左操作数必须是左值
GC_REFCOUNT(ht) = 2;
^
/tmp/pear/temp/yaconf/yaconf.c:103:23: 错误:‘IS_TYPE_COPYABLE’未声明(在此函数内第一次使用)
Z_TYPE_FLAGS_P(zv) = IS_TYPE_COPYABLE;
^
/tmp/pear/temp/yaconf/yaconf.c: 在函数‘php_yaconf_str_persistent’中:
/tmp/pear/temp/yaconf/yaconf.c:149:16: 错误:赋值运算的左操作数必须是左值
GC_FLAGS(key) |= IS_STR_INTERNED | IS_STR_PERMANENT;
^
/tmp/pear/temp/yaconf/yaconf.c: 在函数‘php_yaconf_zval_persistent’中:
/tmp/pear/temp/yaconf/yaconf.c:171:8: 错误:‘IS_CONSTANT’未声明(在此函数内第一次使用)
case IS_CONSTANT:
^
make: *** [yaconf.lo] 错误 1
ERROR: `make' failed
处理办法:
下载github的master,重新编译安装即可
配置php.ini
添加一下内容:
extension=yaconf
yaconf.directory="/mnt/wwwroot/myproject/yaconf"
yaconf.check_delay=60
重启php即可
使用
在目录添加foo.ini
name="yaconf"
year=2015
features[]="fast"
features.1="light"
features.plus="zero-copy"
features.constant=PHP_VERSION
features.env=${HOME}
获取文件配置
php7 -r 'var_dump(Yaconf::get("foo"));'
/*
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"
}
}
*/
直接指定配置项
php7 -r 'var_dump(Yaconf::get("foo.name"));'
//string(6) "yaconf"