言午月月鸟
编程,带娃以及思考人生
首页
编程
带娃
思考人生
编程画图秀
PHP系统解析-配置
dingusxp
2501
### 是什么? > 配置是一个系统基本的功能,方便 控制 系统的运行。 在系统层面,配置作为系统运行的基础数据支撑,其对 **可靠性** 和 **性能** 的要求是 **极高** 的。 实现上,配置项可以存放于数据库,但通常还是采用配置文件的方式,并作为代码一部分集成到系统。 本文主要也是针对这种代码文件配置的方式展开。 ### 配置内容 各种能从系统基本逻辑抽取,作为 参数控制项 独立出来的因子,都可以放到配置中。 实践上,需要权衡系统灵活性和维护成本,可自行把控。一些常用的参考项: - 系统设置: 应用名,域名,时间/时区,系统路径(如 app目录,临时文件目录),预加载资源 等; - 系统组件: 路由,日志,数据库,缓存,视图,队列,文件存储,加密解密,事件/系统钩子 等; - 服务协议: 作为服务方的服务定义,作为调用方的服务访问信息; - 业务配置: 各种各样的业务参数控制。。。 ### 配置文件格式与解析 配置文件有很多常用格式: - json,一种非常通用的数据格式,在配置文件中也很常用,如 npm,composer 的配置文件就是用 json 格式; - xml,老牌的数据格式规范,在 PHP 系统里貌似用的较少; - ini,windows系统用的较多,PHP的配置用的也是 ini 格式; - yaml,一种可读性较好的数据格式,有一批拥护者; 对于PHP系统来说,直接return一个php 数组的方式来做配置也是一个 很好的方案。 ```PHP 'the value', ]; // index.php $config = include(CONFIG_DIR.'/config.php'); ``` 实际上,**推荐使用**这种方式,因为有很多好处: 1 高效:PHP文件会生成opcode缓存,加载更快; 2灵活:配置中可以使用一些简单的函数,外部常量和环境变量,引用类名和类常量 等。 当然,对于灵活性的“度”要把控好,不要在配置文件里加太多非配置范畴的代码。。。 ### 层级结构与资源定位 上面的数据格式中,除了 ini 对于层级支持不太好,其它格式都可以支撑 多层 的结构。 另外,配置文件都会放在一个专属目录;当配置项多了之后,配置会拆分到多个配置文件。 一个配置项的 资源定位 通常是用 **点号** 分割,如: [文件名].[层级1].[层级2]...[节点key] 对应一些小细节: - 配置的文件名(不含后缀),层级,节点key 不应该包含 点号; - 资源定位通常支持任意层级精度的获取,如通过 `[文件名].[层级1] `可以获取到 层级1 下所有配置项; ### 环境变量的引入 代码库中写死配置,会有两个问题: 1. 在开发、测试环境,会有一些配置的值需要调整,常见的如数据库连接参数; 2. 某些敏感配置信息,并不希望直接提交到代码库。 一种简单的解决方案是,引入环境变量。即约定一个不提交到代码库的本地配置文件——就叫**环境变量文件**吧,系统配置的某些参数,改由从该文件中读取的信息为准。 环境变量文件的放置路径,数据格式都可以不同于系统配置的规范,只要系统支持解析并暴露出类似 `env($key, $default=null)` 的方法就行。 实现方案可以参考 hyperf文档:[核心架构-配置-环境变量](https://hyperf.wiki/2.0/#/zh-cn/config?id=%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f) 当然,也可以用简单的方案,即环境变量文件同系统配置都直接使用 php 文件: ```PHP 'config value1', 'config_key2' => 'config value2', ]; ``` ### 配置中心 随着系统组件的丰富,业务复杂性的提升,配置项越来越多,通过代码中放配置文件的方式,维护成本越来越高。 另外,代码文件方式还有一些不足。如:**更新成本高**,**无格式约束**,**智能化不够** 等。 为解决这些问题而生的是 配置中心 服务,详细请参见对应章节。
粤ICP备19051469号-1
Copyright©dingusxp.com - All Rights Reserved
Template by
OS Templates