Otomatik iç / dış geliştirme ortamı algılamak

5 Cevap php

Biz auto aşağıdaki işlev bir makinenin dahili veya canlı bir sunucu üzerine ise algılamak ve daha sonra çeşitli bileşenleri için uygun yapılandırmaları seçin kullanın:

function devIsLocal(){

    $res=false;

    $http_host=$_SERVER['HTTP_HOST'];

    if($http_host=='localhost')$res=true;
    if($http_host=='127.0.0.1')$res=true;
    if(substr($http_host,-4)=='.lan')$res=true;
    if(strpos($http_host, '.')===false)$res=true;

    return($res);

}

Gördüğünüz gibi sadece HTTP_HOST değerine dayanır.

Example.com gibi yerel sanal konağın çeşit kullanmak eğer Tabii ki, o işlevi kandırdın olacak.

Fonksiyonunu kandırmak için başka yolları var mı? ve başka hangi değişkenler / yerlerdir biz nerede belirlemek için gözetleme olabilir?

5 Cevap

'127.0.0.1' == $_SERVER["REMOTE_ADDR"]

Bu canlı sistemde TRUE olarak değerlendirmek asla. :)

Apache sanal konak yapılandırması bir ortam değişkeni ayarlayın. Bu Zend Framework yapar yoludur.

Örnek için ZF quick start guide (bkz. "Sanal Sunucu oluşturma" bölümüne bakın.)

. Httpd.conf veya bir htaccess dosyasına koydu:

SetEnv APPLICATION_ENV "development"

Sonra uygulama, değerini almak için getenv işlevini kullanın:

$environment = getenv("APPLICATION_ENV");
if ($environment == "development")
{
    // do development stuff
}
else if ($environment == "live")
{
    // do live stuff
}

Ekleyerek Andy Shellam's answer ..

Eğer aynı (sanal) belge kökü ile çeşitli etki mod_vhost_alias kullanarak, ya da sahip iseniz, örneğin, parametreler üzerine değişken bağımlı ayarlayabilirsiniz

SetEnvIf SERVER_ADDR x.x.x.x APPLICATION_ENV=development
SetEnvIf HTTP_HOST abc.example.com APPLICATION_ENV=development

Oluşturun ve daha sonra yalnızca canlı sunucunun dosya sistemi üzerinde bulunan bir dosya arayın.

Verilen sizin ortamlarda mümkün olduğunca benzer olmalıdır; ne düşündüren değilim böyle bir şey olur: / var / çevre / adında bir dosya var {devel | Test | qa | düzenleme | canlı}, size konum sunucusuna bağlı olarak - sonra sadece dosya adını kontrol edin.

Tabii ki, sürüm kontrolü gelen ve olabilecek her türlü inşa süreci bu dosyayı dışlamak gerekir.

Example.com gibi yerel sanal host kullanmak varsa tabii, daha sonra işlevi kandırdın olacak.

Ayrıca ev sahibi yerel değil ama bir widlcard veya varsayılan vhost defn kullanır ve kullanıcı bilgisayarlar için IP adresini ekler dosyasını yerel olarak.

Ben de canlı üzerinde var ama orada çoğaltılır dahil yolda bir dizin olması tavsiye ederim - ve sadece mağaza:

function getEnv(){
  return 'Live';
}

veya

function getEnv(){
  return 'Test';
}

If both envs are on the same server - you can still do this by setting the include_path in Apache config veya.htaccess.

Veritabanı ana / şifreleri ve encyption tuşları gibi - Bu, aynı zamanda potansiyel hassas env belirli verileri ayırmak için izin verir.

C.