2013-11-15 178 views
6

Codeigniter開發環境未設置。我總是在index.php中使用這段代碼。但我不明白爲什麼我在本地主機上工作時將「生產」作爲輸出。Codeigniter環境設置

switch(dirname(__FILE__)){ 
case "H:\wamp\www\sitedirectory": 
    define('ENVIRONMENT', 'development'); 
break; 
default: 
    define('ENVIRONMENT', 'production'); 
break; 
} 

    echo ENVIRONMENT ; // output is "production" while i am on localhost 
    echo dirname(__FILE__) ; // output is "H:\wamp\www\sitedirectory" 
+0

這沒有意義,你確定你沒有錯別的地方嗎? – Shomz

+0

是的,我相信沒有錯別字。 – Zohaib

+0

Hoiw是CodeIgniter特有的嗎? –

回答

12

這很奇怪。它對我來說完全一樣。你可以嘗試這樣的事情嗎?

switch($_SERVER["HTTP_HOST"]){ 
case "localhost": 
    define('ENVIRONMENT', 'development'); 
break; 
default: 
    define('ENVIRONMENT', 'production'); 
break; 
} 

echo ENVIRONMENT ; // output development 
+0

感謝它的工作。 dirname(__ FILE__)方法總是適用於我,但我不明白爲什麼這會在此項目中造成問題。再次感謝 – Zohaib

1

要根據服務器的IP動態設置環境,下面我用正則表達式來檢查本地IP,例如127.0。*和10.0。*。

在你的項目看起來對index.php和替換根:

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development'); 

有:

$server_ip = getHostByName(getHostName()); 

if (preg_match("/^(127\.0\.|10\.0\.).+/i", $server_ip)) { 
    define("ENVIRONMENT", "development"); 
    define("BASEURL", "http://localhost:8000/"); 
} else { 
    define("ENVIRONMENT", "production"); 
    define("BASEURL", "https://domain.com/"); 
} 

確保從BASEURL換成你自己的價值,並在application/config/config.php加:

$config['base_url'] = BASEURL; 

要進一步提高添加到application/config/database.php數據庫設置$db['default'] = array(前右:

if(ENVIRONMENT !== 'production') { 
    $db = [ 
      'username' => '', 
      'password' => '', 
      'database' => '', 
      'hostname' => '127.0.0.1' 
    ]; 
} else { 
    $db = [ 
      'username' => '', 
      'password' => '', 
      'database' => '', 
      'hostname' => '' 
    ]; 
} 
1

添加到其他的答案。現在下面的答案看起來像是一個矯枉過正的問題(如果你必須定義環境變量,那麼爲什麼要使用HTTP_HOST呢?根據我的經驗,即使在重新啓動apache之後,CI也未能反映對環境變量所做的任何更改。當從CLI發送請求時更新值)。

if (php_sapi_name() === 'cli') 
{ 
    // incase the request is made using the cli, the $_SERVER['HTTP_HOST'] will not be set 

    define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development'); 
} 
else 
{ 
    switch ($_SERVER["HTTP_HOST"]) 
    { 
     case "localhost": 
      define('ENVIRONMENT', 'development'); 
      break; 
     default: 
      define('ENVIRONMENT', 'production'); 
      break; 
    } 
}