2

本文由neuSnail在segmentfault发表,未经允许严禁转载,原文地址 https://segmentfault.com/a/11...

   我们在开发一个项目时必然会经历本地开发,qa测试,预发测试,线上运行几个过程,而在不同的环境下项目读取的配置文件很可能是不同的,比如项目在本地开发时读取的数据库host地址是127.0.0.1,而在线上读取的可能是另一个地址。此时应该怎么处理呢?每切换一次环境就手动改一下读取的配置文件?这样不但浪费时间降低开发效率而且还容易导致切换读取文件后把代码提交上线前没有改过来导致出错。

   正确的处理方式应该是在不同的环境下读取该环境特有的标识从而读取不同的配置,而php.ini文件就是一个很好的选择,在各个开发环境server中的php.ini内配置不同的runmode值来区分运行环境。在.ini中 的配置方式举例如下:

[runmode]
projectA.runmode='test'

以上代码可以直接添加到php.ini中也可以写为文本xxx.ini添加到conf.d文件夹中单独管理。
在ini中添加配置项后可以通过get_cfg_var()方法读取。给出一个RunMode运行环境读取类的代码如下:

class RunMode
{
    private static $default = 'online';
    private static $runMode = '';
    private static $map = ['online','test','qa'];

    public static function init()
    {
        self::detect();
    }

    private static function detect()
    {
        $runMode = get_cfg_var('projectA.runmode');
        if (!in_array($runMode, self::$map)) {
            self::$runMode = self::$default;
        } else {
            self::$runMode = $runMode;
        }
    }

    public static function getRunMode()
    {
        if (empty(self::$runMode)) {
            self::detect();
        }
        return self::$runMode;
    }
}

在个人的项目初始化时调用RunMode::init()方法来读取.ini中配置的runmode,之后可以通过RunMode::getRunMode()方法来读取当前代码运行的runmode,从而进行特定的配置读取等操作。


neuSnail
530 声望44 粉丝

这个用户穷死了