Birinin basit bir kurulumu (CentOS 7, Apache 2.4.x ve PHP 5.6.20) ve sadece bir web sitesi (sanal barındırma olduğunu varsaymıyor) olduğunu varsayarsak ...
PHP anlamda, $_SERVER['SERVER_NAME']PHP'nin $_SERVERsüper küreselde httpd.conf'daki Apache yapılandırmanıza ( **ServerName**direktif ile UseCanonicalName On) dayalı olarak kaydedilen bir öğedir (dahil edilen sanal ana bilgisayar yapılandırma dosyasından, vb. Olsun). HTTP_HOST , HTTP hostüstbilgisinden türetilir . Bunu kullanıcı girişi olarak kabul edin. Kullanmadan önce filtreleyin ve doğrulayın.
İşte $_SERVER['SERVER_NAME']bir karşılaştırma için temel olarak kullandığım bir örnek . Aşağıdaki yöntem, adlandırılmış ServerValidator(çocuğu Validator) adında somut bir çocuk sınıfından alınmıştır . ServerValidatorkullanmadan önce $ _SERVER içindeki altı veya yedi öğeyi kontrol eder.
HTTP isteğinin POST olup olmadığını belirlerken bu yöntemi kullanıyorum.
public function isPOST()
{
return (($this->requestMethod === 'POST') && // Ignore
$this->hasTokenTimeLeft() && // Ignore
$this->hasSameGETandPOSTIdentities() && // Ingore
($this->httpHost === filter_input(INPUT_SERVER, 'SERVER_NAME')));
}
Bu yöntemin çağrılmasıyla, ilgili $ _SERVER öğelerinin tüm filtreleme ve doğrulama işlemleri gerçekleşir (ve ilgili özellikler ayarlanır).
Çizgi ...
($this->httpHost === filter_input(INPUT_SERVER, 'SERVER_NAME')
... $_SERVER['HTTP_HOST'](sonuçta istenen hostHTTP üstbilgisinden türetilmiş) değerin eşleşip eşleşmediğini denetler $_SERVER['SERVER_NAME'].
Şimdi, benim örnek açıklamak için süper küresel konuşmasına kullanıyorum, ama bu bazı insanlar aşina sırf olduğunu INPUT_GET, INPUT_POSTve INPUT_SERVERaçısından etmek filter_input_array().
Sonuçta sürece benim sunucuda POST isteklerini ilgilenmem, olan bütün dört şartlar yerine getirildiği. Bu nedenle, POST istekleri açısından, bir HTTP hostüstbilgisi sağlanamaması (daha önce test edilmiş olma durumu) katı HTTP 1.0 tarayıcıları için kıyameti yazmaktadır. Dahası, istenen konak değerle aynı olmalıdır için de httpd.conf için, genişleme yoluyla, değer ve içinde superglobal. Yine, ben PHP filtre fonksiyonları ile kullanmak istiyorsunuz, ama benim sürüklenme yakalamak.ServerName$_SERVER('SERVER_NAME')$_SERVERINPUT_SERVER
Apaçi sık kullandığını göz önünde bulundurun ServerNameiçinde standart yönlendirmeler : (Örnek, böyle bir URL'ye kapalı eğik çizgiyi bırakarak olarak http://www.foo.com olma http://www.foo.com/ sen olmasa bile,) URL yeniden yazma özelliğini kullanarak.
$_SERVER['SERVER_NAME']Standart olarak kullanıyorum , değil $_SERVER['HTTP_HOST']. Bu konuda ileri geri birçok şey var. $_SERVER['HTTP_HOST']boş olabilir, bu nedenle yukarıdaki genel yöntemim gibi kod kuralları oluşturmak için temel olmamalıdır. Ancak, her ikisinin de ayarlanabilmesi, eşit olacaklarını garanti etmez. Test, emin olmak için en iyi yoldur (Apache sürümü ve PHP sürümü dikkate alınarak).