什么是Yaconf ?
Yaconf是一个高性能的配置管理扩展,是由PHP核心开发者鸟哥惠新宸发布的PHP7下的扩展应用。主要目标是简化读取项目配置文件, 使配置文件和项目代码分离,增强了配置文件的可读性和可维护性。
Yaconf 它使用单独的一个配置目录(在yaconf.directory
指定), 不和代码在一起,它在PHP启动的时候,处理所有的要处理的配置, 然后这些配置就会常驻内存,随着PHP的生命周期存亡,避免了每次请求的时候解析配置文件,配置目录和代码分离以后,可以借助一个配置管理后台,来实现配置的统一化管理.配置如果有变化, 它会reload,不需要重启(检测的频率由yaconf.check_delay
控制),它支持丰富的配置类型,包括字符串、数组,、分节,、分节继承,并且还可以在配置中直接写PHP的常量和环境变量等.
为什么要用 Yaconf ?
一般我们项目中是用PHP文件做配置的, 一个config目录下可能有十几个甚至数十个.php配置文件, 里面都是各种各样的array, 这就导致配置文件的解析耗费了很大的性能。
安装
1、Windows
扩展下载地址:http://pecl.php.net/package/yaconf
选择一个最新版本:http://pecl.php.net/package/yaconf/1.0.7/windows
根据本地环境学则一个版本
复制 解压后的php_yaconf.dll
文件到 D:\phpStudy\PHPTutorial\php\php-7.0.12-nts\ext
目录
修改php.ini 配置文件,添加以下扩展
代码语言:javascript复制extension=php_yaconf.dll
配置yaconf
代码语言:javascript复制[yaconf]
yaconf.directory="D:phpStudyYaconf" // 配置文件的目录位置
yaconf.check_delay=60 // 配置文件的更新时间
重启所有服务,使用php探针,查看配置是否安装成功
以上表示安装成功了
2、Linux
代码语言:javascript复制git clone https://github.com/laruence/yaconf.git
cd yaconf/
phpize
./configure --with-php-config=/usr/local/php-7.2/bin/php-config
sudo vim /usr/local/php-7.2/etc/php.ini ## 添加
extension=yaconf.so
sudo systemctl restart php-fpm.service
单独使用
在目录 D:\phpStudy\Yaconf
下新增配置文件redis.ini
,内容如下
[base]
parent="yaconf"
children="NULL"
[children:base]
children="set"
重启服务器,新建index.php
文件测试
<?php
$redis = Yaconf::get('redis');
print_r($redis);
打印内容
代码语言:javascript复制$ php index.php
Hello WorldArray
(
[base] => Array
(
[parent] => yaconf
[children] => NULL
)
[children] => Array
(
[parent] => yaconf
[children] => set
)
)
框架集成使用(ThinkPHP6)
php.ini
[yaconf]
yaconf.directory="/home/www/web/cl_new_pay_dev"
yaconf.check_delay=60
TP官方:https://doc.thinkphp.cn/v6_1/peizhi.html
在项目更目录新建thinkphp.ini
添加以下内容( cl_new_pay_dev 目录下)
name="yaconf"
year=2015
features[]="fast"
features.1="light"
features.plus="zero-copy"
features.constant=PHP_VERSION
features.env=${HOME}
由于默认Yaconf使用多个配置文件,建议在项目中使用setYaconf
方法指定Yaconf
使用的独立配置文件,例如
// 建议在应用的公共函数文件中进行设置 common.php
thinkfacadeConfig::setYaconf('thinkphp');
使用助手函数
代码语言:javascript复制var_dump(Config::yaconf('name'));
var_dump(Config::yaconf('year'));
var_dump(Config::yaconf('features')['plus']);
var_dump(Config::yaconf('features.plus'));
var_dump(Config::yaconf('features.constant'));
var_dump(Config::yaconf('features.env'));
打印结果
代码语言:javascript复制string(6) "yaconf"
string(4) "2015"
string(9) "zero-copy"
string(9) "zero-copy"
string(6) "7.2.12"
string(0) ""
不适用助手函数,直接访问
代码语言:javascript复制print_r("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
print_r(Yaconf::get("cpay"));
print_r(Yaconf::get("cpay.common"));
print_r(Yaconf::get("cpay.database"));
print_r(Yaconf::get("cpay.redis"));
print_r(Yaconf::get("cpay.redis.host"));
打印结果
代码语言:javascript复制~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Array
(
[common] => Array
(
[app_name] => 二万OCR
[app_host] => www.cnblogs.com
[app_debug] => 1
)
[database] => Array
(
[app_name] => 二万OCR
[app_host] => www.cnblogs.com
[app_debug] => 1
[hostname] => 127.0.0.1
[database] => cl_cpay
[username] => root
[password] => wang123456,
)
[redis] => Array
(
[app_name] => 点点支付
[app_host] => www.cnblogs.com
[app_debug] => 1
[host] => 192.168.1.1
[port] => 6379
[auth] => 123456
[prefix] => TII
)
)
Array
(
[app_name] => 开源技术小栈
[app_host] => www.tinywan.com
[app_debug] => 1
)
Array
(
[app_name] => 开源技术小栈
[app_host] => www.tinywan.com
[app_debug] => 1
[hostname] => 127.0.0.1
[database] => cl_cpay
[username] => root
[password] => wang123456,
)
Array
(
[app_name] => 开源技术小栈
[app_host] => www.tinywan.com
[app_debug] => 1
[host] => 192.168.1.1
[port] => 6379
[auth] => 123456
[prefix] => TII
)
192.168.1.1
capy.ini
配置文件
[common]
app_name = "开源技术小栈"
app_host = "www.tinywan.com"
app_debug= true
[database:common]
hostname = "127.0.0.1"
database = "cl_cpay"
username = "root"
password = "wang123456",
[redis:common]
host = "192.168.1.1"
port = 6379
auth = 123456
prefix = "TII"