配置文件基本可以说是每个项目都会有,在配置文件中我们通常会配置数据库访问地址、redis连接、url地址等等。早年开发的时候经常碰到这样麻烦的问题:就是本地开发环境的配置和测试环境、生产环境的配置都不全一样,像数据库连接配置、url地址配置等,每次更新项目到测试环境、生产环境的时候都需要修改配置,真的是非常麻烦。

幸好yaf对于配置文件的解析提供了节(section)的支持,并且还支持节之间的继承功能,将节的设置和yaf运行环境(yaf.environ)结合起来就可以达到很好的配置效果,且看如何实现。

配置运行环境

在配置php支持yaf的时候,可以设置一个参数yaf.environ:把本地开发设置成develop、测试环境配置成test、生产环境配置成product,如:

[yaf]
extension=yaf.so
yaf.use_namespace=1
yaf.environ=develop

通过设置运行环境,在项目中可以通过ini_get(‘yaf.environ’)获取环境参数,进而取到相应节的配置。

文件配置

yaf扩展配置

yaf配置文件一般都放在项目的conf文件夹下,这里也不例外。yaf application实例化的时候需要传递一个配置文件路径,假设我们的配置文件叫application.ini,先看下application.ini的结构:

1

2

3

4

5

6

7

8

9

10

11

[common]

; 通用配置

[product : common]

; 生产环境配置

[test : common]

; 测试环境配置

[develop : common]

; 开发环境配置

这里的配置除了节之外,节和节之间还有继承关系。例如[product : common]就表示product的配置会继承common的配置。先配置一个数据库连接看看。

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

[common]

; 通用配置

; 数据库配置

resources.database.params.driver = "pdo_mysql"

resources.database.params.hostname = "127.0.0.1"

resources.database.params.port = 3306

resources.database.params.database = "database"

resources.database.params.username = "username"

resources.database.params.password = "password"

resources.database.params.charset = "UTF8"

resources.database.params.driver_options.1002 = "SET NAMES utf8"

[product : common]

; 生产环境配置

[test : common]

; 测试环境配置

[develop : common]

; 开发环境配置

resources.database.params.hostname = "127.0.0.1"

resources.database.params.database = "database"

resources.database.params.username = "username"

resources.database.params.password = "password"

yaf在实例化应用的传递该配置文件路径和运行环境:

1

2

define("APPLICATION_PATH"realpath(dirname(__FILE__) . '/../'));

$app new \Yaf\Application(APPLICATION_PATH . "/conf/application.ini"ini_get('yaf.environ'));

这样当项目运行环境在develop下的时候,会优先读取[develop : common]内的配置,如果没有则会从[common]中获取。在项目中任何地方都可以通过

1

\Yaf\Application::app()->getConfig();

获取application.ini中的配置。

事实上该例中可以不用传递ini_get(‘yaf.environ’)参数,在实例化的时候yaf会自行读取php.ini中的yaf.environ参数。但如果是其它的配置文件,则需要传递该参数。

额外的配置

随着项目越来越庞大,配置也会越来越复杂,如果都放在项目默认的配置文件application.ini中,可能配置会有好几百行,这样就不容易维护了。一般我们会考虑新建配置文件用来存储额外的配置。yaf中提供了\Yaf\Config\Ini类来处理这些额外的配置文件。

1

$config new \Yaf\Config\Ini(APPLICATION_PATH . '/conf/url.ini'ini_get('yaf.environ'));

在实际读取的时候,最好能设置一个静态变量保存读取到的配置,避免重复申请系统open函数调用。如下:

1

2

3

4

static $config = null;

if ($config === null) {

    $config new \Yaf\Config\Ini(APPLICATION_PATH . '/conf/url.ini'ini_get('yaf.environ'));

}

详细可以参考yaf扩展示例Bootstrap中的getUrlIniConfig方法。

配置文件缓存

yaf官方有提到可以通过yaf.cache_config来缓存配置文件提高性能,但笔者在实际测试中发现差别不大,估计是由于配置文件还不够大的原因,因为拆分了配置?有兴趣的小伙伴可以自行研究测试下,欢迎分享。

小结

通过这样的配置方式我们很好地解决了配置文件的管理问题,可以很方便将整个版本库的代码直接推送到测试环境和发布到生产环境。需要注意的是:如果生产环境的配置有较强的保密性,那就只能在发布的时候进行配置了。

php yaf框架扩展实践一——配置篇相关推荐

  1. php-yaf,php yaf框架扩展实践一——配置篇

    配置文件基本可以说是每个项目都会有,在配置文件中我们通常会配置数据库访问地址.redis连接.url地址等等.早年开发的时候经常碰到这样麻烦的问题:就是本地开发环境的配置和测试环境.生产环境的配置都不 ...

  2. OpenGauss数据库在 CentOS 上的实践,配置篇

    服务器准备 本篇博客可以使用华为云提供的测试 ECS,进行实践,领取地址为:https://activity.huaweicloud.com/free_test/ 如果没有领取到或者名额已满,可以用 ...

  3. 自动化测试框架selenium+java+TestNG——配置篇

    最近来总结下自动化测试 selenium的一些常用框架测试搭配,由简入繁,最简单的就是selenium+java+TestNG了,因为我用的是java,就只是总结下java了. TestNG在线安装: ...

  4. selenium java框架_自动化测试框架selenium+java+TestNG——配置篇

    最近来总结下自动化测试 selenium的一些常用框架测试搭配,由简入繁,最简单的就是selenium+java+TestNG了,因为我用的是java,就只是总结下java了. TestNG在线安装: ...

  5. windows下添加yaf扩展,生成yaf框架

    本机环境 PHP7.0 Apache 2.4.23 YAF框架扩展添加 1:下载添加扩展 https://pecl.php.net/package/yaf 2:将php_yaf.dll把这个文件解压到 ...

  6. Yaf框架视频教程之入门篇【已完成】

    2019独角兽企业重金招聘Python工程师标准>>> 本系列主要介绍PHP的Yaf框架,包含从安装到配置,如何快速的生成代码骨架,也讲解了框架的运行流程,应用在使用前该如何配置,重 ...

  7. windows下扩展yaf,并生成yaf框架文件(亲测)

    YAF中文文档:http://www.laruence.com/manual/index.html 1 YAF框架是用C开发的,属于PHP的扩展框架: 2 YAF的性能相对于源生PHP,性能只降低不到 ...

  8. php yaf环境启动,yaf框架教程(3)- yaf框架环境配置

    一般我们在开发程序时,会分为生成环境(product), 测试环境(test),开发环境(develop)已适应不同的配置需求,yaf框架实现的方法如下. 环境配置 在php.ini配置yaf的时候, ...

  9. nginx.conf文件配置后访问边下载 以及yaf框架使用中NGINX.conf文件配置

    访问变下载 缺这些 location ~ \.php$ {             fastcgi_pass   127.0.0.1:9000;             fastcgi_index   ...

  10. 适合初学者对Yaf框架的学习(一)

    前言 最近接触到Yaf框架,从最初按照鸟哥惠新宸的写的关于Yaf手册,到自己写一个hello world 程序,对于我这个新手来说还是蛮曲折的,大家都知道yaf框架是用C写的,所以自身的效率和性能,还 ...

最新文章

  1. 大三Java后端暑期实习面经总结——Java容器篇
  2. create-react-app 脚手架构建项目,搬砖过程中持续总结心得
  3. [HOW TO]-centos环境搭建opengrok笔记
  4. Boost.Flyweight 性能比较示例
  5. VTK:几何对象之TriangleStrip
  6. 消息中间件系列(二):Kafka的原理、基础架构、以及使用场景
  7. Python面试题_中级版
  8. 基于visual Studio2013解决面试题之1201链表去重
  9. opengl es坐标变换理解1
  10. Ubuntu更新Chrome到最新的版本
  11. sql server安装-没有权限访问文件
  12. 有道词典 DIY 离线版
  13. Android OpenCV(六十二):伪彩色增强
  14. ubuntu22.04无法打开网易云音乐APP
  15. 走出情绪内耗:理性情绪行为疗法
  16. Ubuntu18.04 编译Android 10源码 并烧录源码到pixel3的避坑指南
  17. Android 开发基于Webview 自制一个简单的手机浏览器
  18. 2018计算机考研各科试卷分值分布
  19. 深入理解操作系统实验——bomb lab(phase_2)
  20. 使用AD8618设计ADC信号调理电路随笔

热门文章

  1. gc日志怎么看_JVM探秘:GC日志收集与分析
  2. 在Linux下如何安装Jupyter Notebook
  3. python邮件群发_Python操作Gmail@定时定向群发邮件
  4. resetlog oracle,用RMAN的全备恢复resetlog之前的数据
  5. ffmpeg yuv数据存储方式_一文理解 YUV
  6. 笔试题目:定义一个类不能被继承,且只能被实例化3次 .
  7. 信用评分卡模型分析(基于Python)--理论部分
  8. 自动驾驶 2-1 第 1 课补充阅读:传感器和计算硬件 -- 上
  9. 阿里云云计算 36 PolarDB MySQL的管理步骤
  10. ROC曲线及AUC值