$ _SERVER ['SERVER_NAME'] değişkeni soru

6 Cevap

Nasıl $ _SERVER ['SERVER_NAME'] hariç, gerçek bilgisayar adını alabilirim? Onu almak için başka bir yolu var mı?

Ben PATH host adını alır bir işlev oluşturun.

Bu telnet, vs ile uzaktan (başlıklarını) HTTP isteği göndererek değiştirilebilir çünkü ben $ _SERVER ['SERVER_NAME'] (Sen telnet ile basit bir test yapabilirsiniz) kullanmak istemiyorum

THis is done (will work if you have PATH like /vhosts/website.com/public_html):

function getServerName() {
 $path = realpath(__FILE__);
 $url = array();
 preg_match_all("/\/[a-z0-9-]+(\.[a-z0-9-]+)+/i", $path, $url);
 // 4 is minimum requirement for the address (e.g: http://www.in.tv)
 if (strlen($url[0][0]) > 4) {
  $result = str_replace("/", "", $url[0][0]);
  return $result;
 }
 else
  return false;
}

Teşekkürler!

6 Cevap

* Düzenleme: bamya tarafından belirtildiği gibi, orijinal afiş muhtemelen HTTP_HOST ziyade HOST_NAME demektir. Aksi takdirde, benim cevap düz yanlış. *

HTTP_HOST değişken ziyaretçinin sitesine erişmek için kullanılan etki alanı adı yansıtır. Dosya yolları ile ilgisi yoksa! Onun değeri uygun $ _SERVER ['HTTP_HOST'] saklanır. Bunu elde etmek için başka bir yolu var mı? Tabii ki, bir şeyler yapmak için çeşitli yollar normalde oradayız. PHP, Apache modülü olarak çalıştığında Örneğin, bu işleri.

<?php

$request_headers = apache_request_headers();
echo $request_headers['Host'];

?>

Soru: neden kimse böyle bir şey yapmak istersiniz? Neden sonunda aynı yerden verileri aynı parça getirir ilginç bir çözüm ile güvenilir bir standart yöntem yerine?

$ _SERVER ['HTTP_HOST'] HTTP isteği ile değiştirilmiş olduğu bir endişe var. Tabii ki: bu nereden geliyor bu. Tarayıcı ziyaret etmek istediğini sitesi belirtmek için (ki, isme dayalı sanal konak üs) ve sahtekar bir değer gönderir eğer, iyi, sadece sitesine ulaşmak olmaz vardır.

Eğer istemci tarafından ayarlanamaz bir sunucu adı istiyorsanız, kullanabileceğiniz $_SERVER['SERVER_NAME']. Bamya işaret ve yorumlarda bağlantılar gibi, but can also be forged under certain circumstances bir hata kullanarak sunucu kendisi tarafından ayarlanır.

Ben başvuruyorsunuz biri olduğunu düşünüyorum

$_SERVER['HTTP_HOST'];

hangi HTTP önek o HTTP başlıklarından geliyor demektir verilmiştir.

Sen kullanmak isteyebilirsiniz:

$_SERVER['SERVER_NAME']

sunucu tarafından tanımlanır ve bir isteği ile değiştirilemez hangi?

Bu hostname sunucu tarafı alacak, ancak ticari bir konak (kendinizi barındıran) çalışıyorsa eğer, ben bu tüm bu yararlı olacağını sanmıyorum.

$host = php_uname( 'n' );

Apache kullanıyorsanız, ne yapmalıyım sunucu / sitesi sadece (çok başka yapmaz varsayılan olmalı) bazı isimlerin cevap olun. Sen ServerName ve ServerAlias direktifleri ile yapabilirsiniz.

Tabii ki $_SERVER['HTTP_HOST'], istemci tarafından değiştirilebilir - aslında IT IS, istemci tarafından gönderilen için. Bu http protokolünün bir parçasıdır. Eğer apache veya ne olursa olsun vhost yapılandırmada tanımlanan birincil sunucu adını almak istiyorsanız, başkaları tarafından önerilen gibi $_SERVER['SERVER_NAME'] erişebilirsiniz.

Ben o uygulama dışı relocatable (artık agnostik saklama yeri olacak) hale gelebilir (__FILE__ depolanır) sunucunun dosya yolundan etki alanı adı ayıklamak için akıllıca değil önermek .

Sen var_dump($_SERVER) kullanarak komut dosyası içinde damping tarafından dizinin içeriğini görmek ama akılda değil tüm web sunucuları tutmak ve tüm web sunucusu ayarlarının aynı ortamı maruz bırakabilir. Bu web sunucusu belgelerinde belgelenen ve bunu kısmen php çevrimiçi dokümanlar belgelenmiştir düşünüyorum.

Diğerleri belirttiği gibi apache UseCanonicalName off (için yapılandırılırsa Update / Important notice:, içeriği $_SERVER['SERVER_NAME'] sahte olabilir hangi örneğin Plesk kullanıyorsanız, varsayılan ayar olabilir -tabanlı barındırma). Yani aslında __FILE__ (doc kök bilgisayar adını içeriyorsa) bu çözebilir gidiyor. Ilk yaklaşımın büyük bir sorun php programcıları genellikle SERVER_NAME kullanıcı girişi yok ve dolayısıyla hiçbir uygulama hafife almak, çünkü bu uygulama (SQL, JavaScript) içine şeyler her türlü enjekte etmek için kullanılabilir olmasıdır buna sterilize.

Sen yok. Yani $ _SERVER değişkenleri amacı bulunuyor. Eğer yoldan HOST_NAME almak istiyorsanız, önce $ _SERVER ['HTTP_HOST'] dan PATH almak gerekir