localhost / canlı - HTTP_HOST tarafından tespit

3 Cevap php

Diyelim ki yerel geliştirmek ve canlı sunucuda küçük şeyler ayıklama diyelim.

Benim kod böyle bir şey olması iyi bir fikir mi? :

$is_local = (strpos($_SERVER['HTTP_HOST'], 'localhost') !== false);
define ('DEBUG',$is_local);

Şeyler ayarlarken Ve sonra, benim kod ile bunu kullanabilir?

$mysql_settings = (DEBUG) ? 
  array(/*localhost settings*/) : 
  array(/*live settings*/);

Bu şekilde, ben aynı dosyaların localhost canlı ve kullanabilir, bu yüzden yanlış örneğin sahip herhangi bir korkusu olmadan senkronize edebilirsiniz canlı sunucuda bağlantı ayarları.

Iyi ya da yanlış bir fikir mi?

3 Cevap

Bunu yapıyoruz yolu yapıyor yanlış bir şey.

Başka bir strateji geliştirme (veya diğer non-üretim) sistemi üzerine bazı çevre değişkeni kurmaktır.

Apache altında, böyle bir şey sopa:

SetEnv MYAPP_ENVIRONMENT development

httpd.conf veya uygun bir. htaccess dosyasında

Sonra yapılandırma kodu:

if (! getenv('MYAPP_ENVIRONMENT')){
  $env = 'production';
}else{
  $env = getenv('MYAPP_ENVIRONMENT"));
}

require_once 'conf/config.' . $env . '.php';

veya bu satırlar boyunca bir şey.

IMHO, ne yaptığınızı that fena değil.

Tek kusuru $is_local hattı üzerinde:

$is_local = (strpos($_SERVER['http_host'], 'localhost') !== false);

Bu localhostIsAwesome.com gibi bir site için true değerlendirmek olabilir.

Overall, though, the way you are doing it is actually pretty decent.

Bir başka öneri kullanmak olacaktır $_SERVER[ 'SERVER_NAME' ]

eğer kötü bir fikir değil

  1. Sadece iki çevre, yerel ve sunucu var
  2. Eğer sunucu için hata ayıklama modunu açmak zorunda kalmazsınız

bu yüzden böyle bir senaryo gidermez

  1. dev, test, üretim gibi çoklu ortamları
  2. İkiden fazla geliştirici bir takım

Ben bir proje üzerinde istihdam bir uygulama conf.dev.php, conf.test.php, farklı ortam ayarları conf.prod.php ve env anahtar bayrak için tek bir dosya gibi gibi ayarları kod dosyalarını sahip olmaktır

$env = 'production';

sonra dinamik gibi $ env anahtarı dayalı env setings içeren dosya içerebilir:

require_once 'conf.'.$env.'.php';

git içinde conf.dev.php dosyayı eklemeyi unutmayın / hg / svn dosyayı görmezden, bu nedenle ekip üyeleri arasında pisliği olmaz, ve conf.production.php güvenlik nedenlerden dolayı çok dosyayı görmezden.

Sadece benim iki sent.