2013-11-15 8 views
6

Środowisko programistyczne Codeigniter nie jest ustawione. Zawsze używam tego kodu w index.php. ale nie rozumiem, dlaczego otrzymuję "produkcji" jako wynik, podczas gdy ja pracuję na localhost.Ustawienie środowiska kodowania

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

To nie ma sensu, czy jesteś pewien, że nie masz gdzieś literówki? – Shomz

+0

tak, jestem pewien, że nie ma literówki. – Zohaib

+0

Hoiw jest specyficzny dla CodeIgniter? –

Odpowiedz

12

To dziwne. Zrobił dokładnie to samo dla mnie. Czy możesz spróbować czegoś takiego?

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

echo ENVIRONMENT ; // output development 
+0

Dzięki to działa. Metoda dirname (__ FILE__) działa zawsze dla mnie, ale nie rozumiem, dlaczego powoduje to problem w tym projekcie. Dzięki jeszcze raz – Zohaib

1

Aby dynamicznie ustawić środowisko w oparciu o adres IP serwera, poniżej użyłem wyrażenia regularnego, aby sprawdzić lokalne IP, takich jak 127,0. * I 10.0. *.

u podstaw projekcji patrzeć index.php i zastąpić:

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

z:

$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/"); 
} 

Upewnij się, aby zastąpić wartość z BASEURL z własną rękę iw application/config/config.php dodatku:

$config['base_url'] = BASEURL; 

Aby poprawić dalej, dodaj do application/config/database.php tuż przed ustawień bazy $db['default'] = array(:

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

dodając do innych odpowiedzi. Teraz poniższa odpowiedź może wyglądać jak przesada (jeśli musisz zdefiniować zmienne środowiskowe, to dlaczego w ogóle korzystać z HTTP_HOST? Cóż, na moje doświadczenie CI nie odzwierciedla żadnych zmian wprowadzonych w zmiennych środowiskowych nawet po ponownym uruchomieniu Apache. zaktualizowane wartości podczas wysyłania żądania z 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; 
    } 
}