本文由neuSnail在segmentfault發表,未經容許嚴禁轉載,原文地址 https://segmentfault.com/a/11...php
咱們在開發一個項目時必然會經歷本地開發,qa測試,預發測試,線上運行幾個過程,而在不一樣的環境下項目讀取的配置文件極可能是不一樣的,好比項目在本地開發時讀取的數據庫host地址是127.0.0.1,而在線上讀取的多是另外一個地址。此時應該怎麼處理呢?每切換一次環境就手動改一下讀取的配置文件?這樣不但浪費時間下降開發效率並且還容易致使切換讀取文件後把代碼提交上線前沒有改過來致使出錯。數據庫
正確的處理方式應該是在不一樣的環境下讀取該環境特有的標識從而讀取不一樣的配置,而php.ini文件就是一個很好的選擇,在各個開發環境server中的php.ini內配置不一樣的runmode值來區分運行環境。在.ini中 的配置方式舉例以下:segmentfault
[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,從而進行特定的配置讀取等操做。code