yarconf 7.0+ 读取配置
最后更新于:2022-04-02 02:25:03
[TOC]
> [鸟哥博客](http://www.laruence.com/2015/06/12/3051.html)
> [github](https://github.com/laruence/yaconf)
## 概述
1. 它使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起.
2. 它在PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件.
4. 最重要的, 配置目录和代码分离以后, 可以借助一个配置管理后台, 来实现配置的统一化管理.
5. 它支持(对于非ZTS)配置变更重新加载, 也就是说配置如果有变化(建议更改配置一定使用mv, 不要使用cp), 它会reload, 不需要重启(检测的频率由yaconf.check_delay控制).
6. 它支持丰富的配置类型, 包括字符串, 数组, 分节, 分节继承, 并且还可以在配置中直接写PHP的常量和环境变量等.
## 安装
### pecl
`sudo pecl install yaconf`
### 编译安装
```
$ /path/to/php7/bin/phpize
$ ./configure --with-php-config=/path/to/php7/bin/php-config
$ make && make install
```
## api
### Yaconf::get
`mixed Yaconf::get(string $name, mixed $default = NULL)`
一般来说如果你有一个ini文件叫做foo.ini, 那么$name使用foo的话就会获取到这个文件内的所有内容, 以数组形式返回. default是当配置不存在的时候返回的默认值.
### Yaconf::has
`bool Yaconf::has(string $name)`
这个是检测一个配置是否存在.
## 运行时配置
```
[yaconf]
;设置ini 的路径
yaconf.directory=/Users/idcpj/Web/easyswoole/ini
;如果设置为零,您必须重新启动php来重新加载配置
yaconf.check_delay=1
```
## demo
在 ini 下创建 `foo.ini`
```
name="yaconf"
year=2015
;配置数组
features[]="fast"
features.1="light"
;配置 key-value
features.plus="zero-copy"
; php 常量
features.constant=PHP_VERSION
;读取环境变量
features.env=${HOME}
[base]
parent="yaconf"
children="NULL"
;集成 childre 继承并覆盖 base
[children:base]
children="set"
```
```
Yaconf::get('foo.year'); //2015
Yaconf::get('foo');
/*[
'name' => 'yaconf',
'year' => '2015',
'features' => [
0 => 'fast',
1 => 'light',
'plus' => 'zero-copy',
'constant' => '7.1.23',
'env' => '/Users/idcpj',
],
'base' => [
'parent' => 'yaconf',
'children' => 'NULL',
],
'children' => [
'parent' => 'yaconf',
'children' => 'set',
],
]*/
```
';