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.
- 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:
$pecl install yaconf
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
- 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.
Assuming we place all configurations files in /tmp/yaconf/, thus we added this into php.ini
yaconf.directory=/tmp/yaconf
Assuming there are two files in /tmp/yaconf
foo.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 let's 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 were able to override the values they want.