php實現自動化執行環境檢測

neuSnail發表於2019-02-16

本文由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,從而進行特定的配置讀取等操作。

相關文章