2013-11-15 33 views
6

Codeigniter開発環境が設定されていません。私は常にindex.phpでこのコードを使用します。しかし、なぜ私は出力として "生産"を取得している私はlocalhostで作業している理解していない。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。*。

$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アド:

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

で:あなたはindex.phpに目を向けると置き換えるプロジェクトのルートで

$config['base_url'] = BASEURL; 

さらに改善するために01に追加する他の回答にに追加

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

:右のデータベース設定$db['default'] = array(前。環境変数を定義しなければならない場合、なぜHTTP_HOSTを使うのですか?私の経験では、CIはApacheを再起動しても環境変数に加えられた変更を反映できません。 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; 
    } 
}