介绍
Yaconf 是一个专门用来作配置管理的扩展,由 Laurance 编写并开源;
Yaconf 有以下的特性:
- 轻量,快速
- 常驻内存; 在
PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件 - 支持丰富的配置类型, 包括字符串, 数组, 分节, 分节继承, 并且还可以在配置中直接写
PHP的常量和环境变量 - 修改后自动
reload api简单
安装
Yaconf 是一个 PECL扩展,所以可以通过如下命令轻易安装:
1 |
也可以,自行编译:
1 | /path/to/php7/bin/phpize |
配置项
有两个运行时参数需要在 php.ini 中配置
yaconf.directory
配置文件目录, 这个配置不能通过 ini_set 指定, 因为必须在 PHP 启动的时候就确定好.
yaconf.check_delay
多久(秒)检测一次文件变动, 如果是 0 就是不检测, 也就是说如果是 0 的时候, 文件变更只能通过重启 PHP 重新加载
使用
Yaconf 采用ini文件作为配置文件, 这是因为作者觉得 ini 是最适合做配置文件的, key-value 格式, 清晰可读。
简单的配置写起来如下(以下全部假设 ini 文件的名字是 test):
1 | foo="bar" |
如上所示, 对于一般的配置我们都用引号引起来. 而对于没有引起来的, 会尝试以 PHP 的常量做解释, 也就是说我们可以直接在配置里面写 PHP 的常量.
另外你也看到了, 我们可以直接在配置中写环境变量, 比如上面的 env :
1 | Yaconf::get("test.env"); //test是配置文件名字 |
如上面所示, 你可以看到, 假设对于 foo 的值, 你可以通过如下代码访问:
1 | Yaconf::get("test.foo"); //test是配置文件名字 |
Yaconf 也支持数组类型的配置, 写法如下:
1 | arr[]=1 |
如上面所示你可以直接使用 foo[] 这种形式来定义数组, 也可以使用 arr.1, arr.2 来指定 key 定义.
对于数组的第二个值, 你可以通过如下代码访问:
1 | Yaconf::get("test.arr.1"); //test是配置文件名字 |
或者你可以通过获取整个 arr 数组之后访问:
1 | $arr = Yaconf::get("test.arr"); //test是配置文件名字 |
Yaconf 也支持 map 类型的配置, 写法如下:
1 | map.foo=bar |
对于 map2 的 foo 子 map 的 name 值可以通过如下形式访问:
1 | Yaconf::get("test.map2.foo.name"); //test是配置文件名字 |
并且, 配置文件还可以分节, 和分节继承:
1 | [parent] |
请注意配置的分节继承的语法 children:(冒号)parent, 这的意思是 children 节继承全部 base 的配置项. 然后你在 children 节里面定义的和 parent 节中同名的配置, 会覆盖掉 parent 中定义的内容。
对于 chidlren 节的 children 配置的值可以通过如下形式访问:
1 | Yaconf::get("test.children.children"); //test是配置文件名字 |