yaconf php 修改版 支持多级目录读取配置
php7 -r 'var_dump(Yaconf::get("aaa/bbb/bar.base.parent"));' 使用'/'读取目录对应配置信息
#Yaconf - Yet Another Configurations Container
A PHP Persistent Configurations Container
- PHP 7+
Yaconf is a configurations container, it parses ini files, and store the result in PHP when PHP is started.
###Features
- Fast, Light
- Zero-copy while accesses configurations
- Support sections, sections inheritance
- Configurations reload automatically after changed
Yaconf is an PECL extension, thus you can simply install it by:
Or you can compile it by your self:
$ /path/to/php7/bin/phpize $ ./configure --with-php-config=/path/to/php7/bin/php-config $ make && make install
### Runtime Configure
- 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.
### APIs
#### mixed Yaconf::get(string $name, mixed $default = NULL)
#### bool Yaconf::has(string $name)
### Example
#### Directory
Assuming we place all configurations files in /tmp/yaconf/, thus we added this into php.ini
yaconf.directory=/tmp/yaconf
#### INI Files
Assuming there are two files in /tmp/yaconf
foo.ini
````ini
name="yaconf"
year=2015
features[]="fast"
features.1="light"
features.plus="zero-copy"
features.constant=PHP_VERSION
features.env=${HOME}
and bar.ini
[base]
parent="yaconf"
children="NULL"
[children:base]
children="set"
lets access the configurations
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"
}
}
*/
As you can see, Yaconf supports string, map(array), ini, env variable and PHP constants.
you can also access configurations like this:
php7 -r 'var_dump(Yaconf::get("foo.name"));'
//string(6) "yaconf"
php7 -r 'var_dump(Yaconf::get("foo.features.1"));'
//string(5) "light"
php7 -r 'var_dump(Yaconf::get("foo.features")["plus"]);'
//string(9) "zero-copy"
Now lets see the sections and sections inheritance:
php7 -r 'var_dump(Yaconf::get("bar"));'
/*
array(2) {
["base"]=>
array(2) {
["parent"]=>
string(6) "yaconf"
["children"]=>
string(4) "NULL"
}
["children"]=>
array(2) {
["parent"]=>
string(6) "yaconf"
["children"]=>
string(3) "set"
}
}
*/
Children section has inherited values in base sections, and children is able to override the values they want.