鳥哥博客原文:Yaconf – 一個高性能的配置管理擴展
什么是yaconf ?
它使用單獨的一個配置目錄(在yaconf.directory指定), 不和代碼在一起.它在PHP啟動的時候, 處理所有的要處理的配置, 然后這些配置就會常駐內存, 隨着PHP的生命周期存亡. 避免了每次請求的時候解析配置文件.配置目錄和代碼分離以后, 可以借助一個配置管理后台, 來實現配置的統一化管理.配置如果有變化, 它會reload, 不需要重啟(檢測的頻率由yaconf.check_delay控制).它支持豐富的配置類型, 包括字符串, 數組, 分節, 分節繼承, 並且還可以在配置中直接寫PHP的常量和環境變量等.
為什么要用 yaconf ?
一般我們項目中是用PHP文件做配置的, 一個config目錄下可能有十幾個甚至數十個.php配置文件, 里面都是各種各樣的array, 這就導致配置文件的解析耗費了很大的性能。
安裝
1、Windows
Windows 10 環境配置
phpStudy 集成環境
擴展下載地址: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 配置文件,添加以下擴展
extension=php_yaconf.dll
配置yaconf
[yaconf]
yaconf.directory="D:\phpStudy\Yaconf" // 配置文件的目錄位置
yaconf.check_delay=60 // 配置文件的更新時間
重啟所有服務,使用php探針,查看配置是否安裝成功
以上表示安裝成功了
2、Linux
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);
打印內容
$ php index.php
Hello WorldArray
(
[base] => Array
(
[parent] => yaconf
[children] => NULL
)
[children] => Array
(
[parent] => yaconf
[children] => set
)
)
二、框架集成使用(ThinkPHP5.1)
php.ini
[yaconf]
yaconf.directory="/home/www/web/cl_new_pay_dev"
yaconf.check_delay=60
在項目更目錄新建 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
think\facade\Config::setYaconf('thinkphp');
(1)使用助手函數
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'));
打印結果
string(6) "yaconf"
string(4) "2015"
string(9) "zero-copy"
string(9) "zero-copy"
string(6) "7.2.12"
string(0) ""
(2)不適用助手函數,直接訪問
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"));
打印結果
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~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] => 二萬OCR
[app_host] => www.cnblogs.com
[app_debug] => 1
)
Array
(
[app_name] => 二萬OCR
[app_host] => www.cnblogs.com
[app_debug] => 1
[hostname] => 127.0.0.1
[database] => cl_cpay
[username] => root
[password] => wang123456,
)
Array
(
[app_name] => 二萬OCR
[app_host] => www.cnblogs.com
[app_debug] => 1
[host] => 192.168.1.1
[port] => 6379
[auth] => 123456
[prefix] => TII
)
192.168.1.1
capy.ini 配置文件
[common]
app_name = "二萬OCR"
app_host = "www.cnblogs.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"