每个项目都有很多例如数据库、第三方账号秘钥的配置存储文件,大多数的做法是利用文件存储,在代码项目中建立一个config目录存储.php文件,不论以数组还是json格式的存储,其实每次在获取配置文件值得时候都得进行文件操作,其实这个过程会话费比较多的时间,而且在多人不同配置下开发也不方便,而且一旦代码泄露,对应很多重要账户服务器信息将收到安全威胁。
这里我们使用鸟哥出品的“Yaconf”php扩展,其原理和优势如下:
它使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起.
它在PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件.
所有的配置内容都是immutable的, 这就可以借助于Fork的COW, 降低内存占用, 并且在访问配置的时候, 几乎不需要任何的内存Copy, 也不会有无谓的引用计数增减
最重要的, 配置目录和代码分离以后, 可以借助一个配置管理后台, 来实现配置的统一化管理.
它支持(对于非ZTS)配置变更重新加载, 也就是说配置如果有变化(建议更改配置一定使用mv, 不要使用cp), 它会reload, 不需要重启(检测的频率由yaconf.check_delay控制).
它支持丰富的配置类型, 包括字符串, 数组, 分节, 分节继承, 并且还可以在配置中直接写PHP的常量和环境变量等.
最重要的是, 它很简单.
这个扩展的由来是鸟哥在微博工作所开发的,后来在开发完php7之后将其重新设计编写开源出来。
安装
pecl install yaconf
安装完成之后,我们执行“php -m”查看目前已经安装的php扩展,这时可以看到有yaconf扩展的存在,证明安装成功了。
配置
在服务器建立一个专门存放“yaconf”配置文件的目录,配置文件以.ini的文件类型存在。
然后编辑php.ini文件,插入“yaconf.directory=刚才建立的配置文件目录”。
使用
Yaconf 只提供了俩个方法:
-
获取一个配置
mixed Yaconf::get(string $name, mixed $default = NULL)
这个是获取一个配置, 名字是配置的名字, 一般来说如果你有一个ini文件叫做foo.ini, 那么$name使用foo的话就会获取到这个文件内的所有内容, 以数组形式返回. default是当配置不存在的时候返回的默认值.
-
检测一个配置是否存
bool Yaconf::has(string $name)
结语
我在自己mac上一分钟安装配置完成,确实很方便。
具体原理请看鸟哥博客http://www.laruence.com/2015/06/12/3051.html
舍弃文件存储配置使用Yaconf吧!
最后结语,鸟哥是真牛逼。