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 配置文件,添加以下扩展
1 | extension=php_yaconf.dll |
配置yaconf
1 2 3 | [yaconf] yaconf.directory= "D:\phpStudy\Yaconf" // 配置文件的目录位置 yaconf.check_delay=60 // 配置文件的更新时间 |
重启所有服务,使用php探针,查看配置是否安装成功
以上表示安装成功了
2、Linux
1 2 3 4 5 6 7 8 9 | 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,内容如下
1 2 3 4 5 6 | [base] parent= "yaconf" children= "NULL" [children:base] children= "set" |
重启服务器,新建 index.php 文件测试
1 2 3 | <?php $redis = \Yaconf::get( 'redis' ); print_r( $redis ); |
打印内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ php index.php Hello WorldArray ( [base] => Array ( [parent] => yaconf [children] => NULL ) [children] => Array ( [parent] => yaconf [children] => set ) ) |
二、框架集成使用(ThinkPHP5.1)
php.ini
1 2 3 | [yaconf] yaconf.directory= "/home/www/web/cl_new_pay_dev" yaconf.check_delay=60 |
在项目更目录新建 thinkphp.ini 添加以下内容( cl_new_pay_dev 目录下)
1 2 3 4 5 6 7 | name= "yaconf" year=2015 features[]= "fast" features.1= "light" features.plus= "zero-copy" features.constant=PHP_VERSION features. env =${HOME} |
由于默认Yaconf使用多个配置文件,建议在项目中使用setYaconf
方法指定Yaconf
使用的独立配置文件,例如
1 2 | // 建议在应用的公共函数文件中进行设置 common.php think\facade\Config::setYaconf( 'thinkphp' ); |
(1)使用助手函数
1 2 3 4 5 6 | 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' )); |
打印结果
1 2 3 4 5 6 | string(6) "yaconf" string(4) "2015" string(9) "zero-copy" string(9) "zero-copy" string(6) "7.2.12" string(0) "" |
(2)不适用助手函数,直接访问
1 2 3 4 5 6 | 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" )); |
打印结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~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 配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [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" |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· BotSharp 5.0 MCP:迈向更开放的AI Agent框架
· 分享 3 款基于 .NET 开源且免费的远程桌面工具
· 在线聊天系统中的多窗口数据同步技术解密
· 2025,回顾出走的 10 年
· 设计模式脉络