Hello welcome to Yzone.net

php项目配置的几种方式

一个好项目首先就得有一个好的项目配置,能让我们根据需要灵活的获取配置项,而无需对机器环境的变换考虑太多。

配置文件类型

现在比较流行的配置文件类型有

  • php - php 原始的 array 配置,简单易读且强大。
  • ini - ini格式的配置,简洁、通用型强
  • json - json 格式的配置,易读、通用型强
  • yml - yml 格式的配置文件是 json 文件的不错替代,编写更简单

配置方式

不管何种的配置方式,适应多环境,都是我们首先要考虑的。

类似 yii 的方式

首先规定好几个环境,如

  • dev - 开发环境
  • test - 测试环境
  • pre - 预发布环境
  • pdt / pro - 正式环境,生产环境

事先就编写一个公共的基础配置和几套环境的相应配置。在相应的机器上设置好当前环境,就可以了。这样获取的配置都当前环境的配置。

但是呢,每次发布到新的机器都要设置当前环境,也是个麻烦的事情 :)

我们可以根据一些条件来定义当前机器的环境。

  • hostname 给不同的机器定义不同的hostname,在入口文件中获取到它,再根据不同的hostname自动定义当前环境。这样就会加载正确的环境配置了。

不过这样的话,多个项目在同一台机器上时就有些不太灵活了

  • domain 根据项目的运行域名来自动选择环境,这个呢就不会拘泥于机器了。 比如 正式环境的项目运行地址是 api.site.com, 那我们可以定义区别环境的域名: dev api-dev.site.com test api-test.site.com pre api-pre.site.com

类似 laravel 的方式

就编写一个公共的基础配置,再通过一个不加入版本控制的 .env 来设置一些当前机器配置用于覆盖基础的配置。

有一点问题就是,多环境的情况下,也得编写好多个 .env 放置到对应的机器上去。而且当前环境的特殊变动必须上机器去修改。

多个环境的配置在一起

对于小的项目,不想太麻烦。可以将多个环境的配置编写在一起,不同环境的配置通过前缀或子节点名来区分。

如:

// 默认的
'name' => 'app',
'charset' => 'utf-8',

// 使用前缀的
'test.name' => 'app-test',
'test.charset' => 'utf-8',

// 子节点名为其他环境名称
'test' => [
    'name' => 'app-test',
    'charset' => 'utf-8',
]

这样子对于小的项目非常方便,只需维护这一个文件即可。获取配置时可以通过配置类提供特殊方法获取到不同的环境配置。

$config->getTest('name'); // app-test

分类 php    标签 php , tool
文档结构