PHP ile yapılandırma dolayısıyla üzerinde ve hangi sunucu belirlemek için en iyi yolu nedir?

7 Cevap php

Ben bir PHP komut dosyası / site şu anda üzerinde çalıştığı sunucu belirlemek olan en iyi yolu belirlemek için çalışıyorum.

Şu anda ben bir switch() o kullandığı $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] Üzerinde bulunuyor hangi sunucu belirlemek. O sonra üzerinde bulunuyor hangi sunucu tabanlı bağlantı parametreleri, SMTP paramters ve hata ayıklama ayarları db, birkaç yolları belirler. (Belki ek parametreler sitesi ihtiyaçlarına Orada bağlı.)

Bu benim sadece herhangi bir kod (özellikle yapılandırma) değiştirmek zorunda kalmadan yapılandırılmış sunucularından herhangi üzerine siteyi bırakabilirsiniz anlamına gelir. Yeni bir sunucu varsa, o zaman ben sadece yeni bir case ekleyebilir ve o andan itibaren hazır.

Biz aynı SERVER_NAME:SERVER_PORT kombinasyonuna dayalı yapılandırma dosyaları yükleme yapılabilir, ancak bunu korumak zorunda başka bir dosya var, artı ekstra durumlarda sahip olmasına rağmen (ki, ayrıştırma ini dosyalarının hızına emin değildi bulduk Her sunucu) gibi yavaş olabilir.

Bir site genellikle 2 sunucuları arasında taşındığında biz başka bir sorun, ama biz her aynı SERVER_NAME ve SERVER_PORT kullanın. Bu, geçici bir olgu yorum ve repo içine almaz sağlamak gerekiyor demektir.

Başka başka fikirler? (Bazen SERVER_NAME ve SERVER_PORT olmayan) tüm sunucular için kullanılabilir olması gerekir. Bu CLI PHP ile çalıştı eğer o da güzel olurdu.

7 Cevap

Nasıl $_SERVER['SERVER_ADDR'] ve sunucunun IP adresini kapalı kimliğini temel kullanma hakkında.

GÜNCELLEME: Bir sanal konak durumda, ayrıca bu nedenle gibi belge kök yolu ile IP bağlamak isteyebilirsiniz:

$id = $_SERVER['SERVER_ADDR'] . $_SERVER['DOCUMENT_ROOT'];

(Biz vhostları bir sürü aynı yazılım dağıtmak) tüm vhost özgü bilgileri içeren bir dosya içeren bir PHP dosya oluşturmak için $ _SERVER ['HTTP_HOST'] değişkeni kullanmak

Ben örneğin, yapılandırmaları hiyerarşileri oluşturmak için onunla zeki almak gibi, bu tekniği gibi için www.foo.com,

  • yüklemeye çalıştığınızda com.config.php
  • yüklemeye çalıştığınızda foo.com.config.php
  • yüklemeye çalıştığınızda www.foo.com.config.php

Bu şekilde yaparak size genel olarak tüm canlı siteler için seçenek ayarlamanızı sağlar, ve gibi-gerektiğinde münferit siteleri çimdik. Biz de geliştirici sanal alanlar için kendi iç kök etki alanı adı var, bu yüzden internal.config.php tüm geliştirici düzeyi seçenekleri etkinleştirebilirsiniz

Böylece Ayrıca ters yapabilirsiniz, yani www.foo.com.config.php yüklemeye çalıştığınızda, ve bulunan sadece eğer foo.com.config.php yüklemeye çalışacaktı, ve. Daha verimli, ama biraz daha az esnek.

Burada kontrol edebilirsiniz bazı değişkenler şunlardır:

$_SERVER['HTTP_HOST'];

Ben php apache üzerinden çalışırken kulüpler hangi sunucu kontrol etmek için bunu kullanın.

$_SERVER['USER'];
$_SERVER['LOGNAME'];

Ben konsoldan koşuyorum biliyorum zaman bu ikisini kullanın. Bunlardan biri her zaman kullanılabilir bir kullanıcı adı giderir. Konsol modunda başka bir konak tanımlayan değişkenler var gibi görünüyor.

Bu yeterli size yardımcı olabilir; Eğer bulursanız yine benzersiz size üzerinde ne sunucu tespit edememek bunu bir biraz verebilir zor bir zaman var "itme". Benim durumda ben temelde environment I (örneğin development veya {[(2) çalışan kulüpler bir php değişken tanımlayan ayarı, her sunucu için benzersiz bir küçük config dosyası var }].) Bu şekilde yalnızca kaynak denetimi dışında dosyayı yeniden kolay küçük bir, korumak gerekir.

Ive her zaman bu sunucuya percificic olabilir gibi infomation storeing, benim sitelerde bir config.php tuttu.

  • Php parseing olmak neredeyse (örneğin dosya açılması gerekiyor, vs, kapalı) kadar hızlı her komut üstündeki koduna sahip, ve ini ve xml yapılandırma çözümleri daha hızlı olarak
  • Kadar tarih tutmak o kadar kolay her sunucuda siteler yapılandırması için merkezi konum (sunucu geneli updateing, bu oftern değişmez bir güncelleştirme komut ile basittir).
  • Komut dosyası tarafından oluşturulmuş olabilir, benim tüm siteler $ config [] doç dizi kullanıyorum config dosyasını yeniden oluşturur bir işlevi var.
  • Config dosyası "; config_update () $ config ['key'] = 'yeni değer'" gibi basit etkisi Güncellemeleri

Aşağıdaki mekanizması kullanılarak edilmiştir:

if(__FILE__ === '/Sites/mywebsite.com/includes/config.php')
    define('SERVER', 'DEV');
else
    define('SERVER', 'PRODUCTION');

Benim geliştirme ortamı bu yüzden iyi çalışıyor, ve olurdu ancak ben (ek etki $_SERVER[HTTP_HOST] eklenir eğer endişelenmenize gerek, ya da yanlış bir HTTP_HOST değer sağlayan bir istemci yok oldukça farklı bir yol yapıya sahiptir nadir ...).

Neden proje dizin dışında depolanan her konak için yapılandırma dosyaları var ve php kod okumuyorsunuz?

Konak özel bir kod olması gerçekten iyi bir uygulama değildir.

Biz bu (. - Yani geliştirme / test / üretim belirli bir sunucu ortamı içerecek ENVPHP ortam değişkeni) için ortam değişkenlerini kullanın. Bu yaklaşım (CLI için Apache için size konak yapılandırmasında SetEnv anahtarlarını kullanabilirsiniz, OS ortam değişkenleri set) de CLI komut için çok iyi çalışıyor. PHP Eğer getenv ('ENVPHP') kullanarak bu ortam değişkeni erişmek ...