在了解到PHP鸟哥还有这个扩展后,我安装尝试了一下

在这里有介绍 https://pecl.php.net/package/yaconf  这里有更详细的代码和说明 https://github.com/laruence/yaconf

好了,到这里git下载代码

git clone https://github.com/laruence/yaconf

然后  cd yaconf

执行这几步操作

phpize7.4
./configure
make
sudo make install

然后发现编译成功了,就去添加一下 php.ini 文件

extension=yaconf

[yaconf]
yaconf.directory=/myyaconf/conf/
yaconf.check_delay=360

添加扩展开启,并配置这两个参数,前面的是要读取的配置文件地址, 后面是多久刷新一次。(但我测试发现这个时间好像没起作用 也许是我测试的方式不太对)

好了,在根目录创建文件夹

/myyaconf/conf/

给一下需要的权限,然后创建 bar.ini 配置文件文件里面这样写

[base]
parent="yaconf"
children="NULL" [children:base] ;inherit from section "base"
children="set"
children2="set2"

权限给这个

-r--r--r-- 1 root root 131 8月  27 18:03 bar.ini

/myyaconf/conf/文件夹的权限给755就行

drwxr-xr-x   3 root root 4.0K 8月  27 17:44 myyaconf/

drwxr-xr-x 2 root root 4.0K 8月  27 17:44 conf/

重启apache2然后看一下效果

<?php
$list = Yaconf::get("bar");
var_dump($list);
exit;

打印结果

array(2) { ["base"]=> array(2) { ["parent"]=> string(6) "yaconf" ["children"]=> string(4) "NULL" } ["children"]=> array(3) { ["parent"]=> string(6) "yaconf" ["children"]=> string(3) "set" ["children2"]=> string(4) "set2" } }

如果是Cli模式执行,则更新ini配置文件后,数据直接就立即加载了,没有等待时间

web模式下没有立即加载,我本地测试的是360秒到期也没重新加载,估计还有其他方面的问题我没考虑到,然后apache2 重启就能加载了。

测试了一下这个速度还是不错的,单次读取的时候花费 0.007ms - 0.01ms.

<?php
for ($i=0; $i < 1; $i++) {
$list = Yaconf::get("bar");
}

当我执行10000次的时候,花费 2.02ms - 3.17ms,约每次 0.000202ms - 0.000317ms

<?php
for ($i=0; $i < 10000; $i++) {
$list = Yaconf::get("bar");
}

我估计是因为这个获取会设置静态成员变量,首次读取花费时间久,后面就非常快了。

这个配置适合用来加载固定的配置变量常量等,因为它会在php的生命周期里面存活,避免了传统开发中每次都要Include自己需要的配置变量,加快了运行速度

php yaconf扩展的更多相关文章

  1. PHP7 学习笔记(十六)Yaconf 一个高性能的配置管理扩展

    鸟哥博客原文:Yaconf – 一个高性能的配置管理扩展 什么是yaconf ? 它使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起.它在PHP启动的时候, 处理所有 ...

  2. Yaconf – 一个高性能的配置管理扩展

    鸟哥出品:http://www.laruence.com/2015/06/12/3051.html 首先说说, 这个是干啥的. 我见过很多的项目中, 用PHP文件做配置的, 一个config目录下可能 ...

  3. PHP持久配置容器Yaconf

    PHP持久配置容器Yaconf的安装及使用 Yaconf介绍:Yaconf是一个配置容器,它解析ini文件,在PHP启动时将结果存储在PHP中,配置存在于整个PHP生命周期中,这使得它非常快. 要求: ...

  4. Yaconf-配置管理扩展

    1.下载yaconf安装包git clone https://github.com/laruence/yaconf.git2.目录切换至yaconf,编译生成so 文件(找到你的phpize位置) / ...

  5. Asp.net Boilerplate之AbpSession扩展

    当前Abp版本1.2,项目类型为MVC5. 以属性的形式扩展AbpSession,并在"记住我"后,下次自动登录也能获取到扩展属性的值,版权归"角落的白板报"所 ...

  6. 恢复SQL Server被误删除的数据(再扩展)

    恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...

  7. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  8. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  9. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  10. Dapper扩展之~~~Dapper.Contrib

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...

随机推荐

  1. 最详细STL(三)list

    list就是链表啦,他的一个结点由两个指针域,一个数据域组成.list可以在任何位置以O(n)的复杂度插入元素,头部和尾部的插入的复杂度为O(1).然而list也有一个致命的缺点,因为链表的空间申请是 ...

  2. GPT 中的函数调用(function call)是什么?

    在 OpenAI ChatGPT API 和 Google Gemini API 中我们可以看到函数调用的功能.这个功能是做什么用的?下面大概讲解. 以 Google Gemini API 函数调用 ...

  3. LaTeX cleveref 宏包用法

    介绍 cleveref 宏包是 LaTeX 中用于增强交叉引用功能的一个强大工具.它的主要特点是能够自动地按照不同元素的类型(如章节.图表等)生成格式化的引用,同时还支持定制引用格式,提供了比 LaT ...

  4. release版本 APP 出现waiting for debugger

    前提:同一包代码,打包两个版本,修改包名,在同一设备上存在两个版本 状态:运行时,发现 一版本是正常 另一版本打开会提示 Waiting for debugger弹窗,(此时由于是开发状态,设备一直开 ...

  5. 小tips:docker 配置国内镜像地址

    在配置文件daemon.json中添加国内镜像,让其下载加速. vi /etc/docker/daemon.json 如下国内镜像: { "registry-mirrors": [ ...

  6. Node.js开发博客项目笔记-搭建环境(2)

    搭建环境 首先新建blog-1文件夹,在文件夹下初始化package.json,执行命令: npm init -y 生成的package.json文件中的main属性默认值index.js改成bin/ ...

  7. Angular 18+ 高级教程 – Animation 动画

    前言 Angular 有一套 built-in 的 Animation 方案.这套方案的底层实现是基于游览器原生的 Web Animation API. CSS Transition -> CS ...

  8. 人脸识别 face detect & recognize

    前言 最近有一个项目要升级. 它是一个在线教育的 web app. 由于学生年龄小, 不适合用 username/password 这种方式做登入. 所以项目开始之初是使用 RFID 来登入的. 但由 ...

  9. Spring —— (Spring管理第三方资源)数据源对象管理

    数据源对象管理      (用户名密码等敏感的数据不会直接放在bean中 而是放在properties文件中进行管理)    加载properties文件      在resource中创建 jdbc ...

  10. 【QT性能优化】QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分层查询优化

    [QT性能优化]QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分层查询优化 简介 本文使用QT树状控件QTreeView快速展示SQLite数据库中的1000万条具有层次结构的数据记录,当 ...