PHP7 学习笔记(十六)Yaconf 一个高性能的配置管理扩展
鸟哥博客原文: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"
PHP7 学习笔记(十六)Yaconf 一个高性能的配置管理扩展的更多相关文章
- Yaconf – 一个高性能的配置管理扩展
鸟哥出品:http://www.laruence.com/2015/06/12/3051.html 首先说说, 这个是干啥的. 我见过很多的项目中, 用PHP文件做配置的, 一个config目录下可能 ...
- python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
- (C/C++学习笔记) 十六. 预处理
十六. 预处理 ● 关键字typeof 作用: 为一个已有的数据类型起一个或多个别名(alias), 从而增加了代码的可读性. typedef known_type_name new_type_nam ...
- SharpGL学习笔记(十六) 多重纹理映射
多重纹理就把多张贴图隔和在一起.比如下面示例中,一个表现砖墙的纹理,配合一个表现聚光灯效果的灰度图,就形成了砖墙被一个聚光灯照亮的效果,这便是所谓的光照贴图技术. 多重纹理只在OpenGL扩展库中才提 ...
- JavaScript权威设计--CSS(简要学习笔记十六)
1.Document的一些特殊属性 document.lastModified document.URL document.title document.referrer document.domai ...
- MySQL学习笔记十六:锁机制
1.数据库锁就是为了保证数据库数据的一致性在一个共享资源被并发访问时使得数据访问顺序化的机制.MySQL数据库的锁机制比较独特,支持不同的存储引擎使用不同的锁机制. 2.MySQL使用了三种类型的锁机 ...
- python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作
django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ ...
- yii2源码学习笔记(十六)
Module类的最后代码 /** * Registers sub-modules in the current module. * 注册子模块到当前模块 * Each sub-module shoul ...
- Swift学习笔记十六:协议
Protocol(协议)用于统一方法和属性的名称,而不实现不论什么功能. 协议可以被类.枚举.结构体实现.满足协议要求的类,枚举,结构体被称为协议的遵循者. 遵循者须要提供协议指定的成员,如属性,方法 ...
随机推荐
- 【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题
题目描述 给出一个\(n\)行\(m\)列的矩阵\(A\), 保证满足以下性质: 1.\(m>n\). 2.矩阵中每个数都是\([0,n]\)中的自然数. 3.每行中,\([1,n]\)中每个自 ...
- 【XSY1580】Y队列 容斥
题目大意 给你\(n,r\),求第\(n\)个不能被表示为\(a^b(2\leq b\leq r)\)的数 \(n\leq 2\times {10}^{18},r\leq 62\) 题解 我们考虑二分 ...
- ElasticSearch5.4.1 搜索引擎搭建文档
安装配置JDK环境JDK安装(不能安装JRE)JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-download ...
- httpd配置
HTTP:Hypertext Transfer Protocol: HTML:Hypertext Markup Language: URL:Uniform Resource Locator,在Inte ...
- [APIO2008]免费道路(生成树)
新亚(New Asia)王国有 N 个村庄,由 M 条道路连接.其中一些道路是鹅卵石路,而其它道路是水泥路.保持道路免费运行需要一大笔费用,并且看上去 王国不可能保持所有道路免费.为此亟待制定一个新的 ...
- 解决zabbix3.4图表显示中文乱码问题
问题描述: 在Zabbix界面设置中,已经调成中文语言,可能zabbix自身携带的字体还不够完美,出现如下乱码: 测试环境: zabbix 3.4(经测试,目前3.x版本都适用) 解决步骤: 1. 寻 ...
- hdu 1978 How many ways(记忆化搜索)
这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下:1.机器人一开始在棋盘的起始点并有起始点所标有的能量.2.机器人只能向右或者向下走,并 ...
- php 限制类的对象类型
事实上,采用哪种处理参数类型的策略,取决于任何潜在bug的严重程度.通常PHP会根据语境自动转换大多数基本数据类型. 因此,你需要在检测类型.转换类型和依赖良好清晰的文档(无论决定用哪一种,都应该提供 ...
- python学习day6 数据类型Ⅳ(集合)
day6 数据类型-集合 内容补充: 列表功能: .reverse()反转 v = [1,2,3,4,5,6]v.reverse()print() #[6, 5, 4, 3, 2, 1] .sort( ...
- Spring的核心
技术书籍这么多,每次好不容易读完一本,但总过不了多久就会遗忘.为了对抗,整理记录和回看,也是实属必要.由此,从这<Spring 实战(第四版)>开始,记录一下知识点,下次再要复习时,能免去 ...