2012-12-08 11 views

उत्तर

21

$_SERVER['SERVER_NAME'] के रूप में (अपाचे अपाचे .conf फ़ाइल के लिए यानी) मेजबान विन्यास में परिभाषित किया गया सर्वर नाम के मूल्य देता है।

$_SERVER['HTTP_HOST'] आपको वह डोमेन नाम देता है जिसके माध्यम से वर्तमान अनुरोध पूरा हो रहा है और अनुरोध से अधिक सीधे संबंधित है।

HTTP_HOST आमतौर पर अधिकतर अनुप्रयोगों में अधिक उपयोगी होता है, जिसमें यह सीधे अनुरोध से संबंधित है, जबकि SERVER_NAME conf फ़ाइल में जो भी मूल्य वापस कर सकता है और अनुरोध के बारे में आपको कुछ भी नहीं बताता है।

मैं आपको एक उदाहरण दूंगा कि HTTP_HOSTSERVER_NAME से भिन्न हो सकता है। मान लें कि आपके पास अपाचे में domain.com के सर्वर नाम के साथ एक होस्ट है और 1.2.3.4 का आईपी पता है।

के दो भेजे अनुरोध यूआरएल पर नजर डालते हैं और इन चर के बीच अंतर दिखाने:,

http://www.domain.com 
HTTP_HOST = www.domain.com 
SERVER_NAME = domain.com 

http://1.2.3.4 
HTTP_HOST = 1.2.3.4 
SERVER_NAME = domain.com 

तो फिर, HTTP_HOST अनुरोध करने के लिए अधिक से जुड़ा हुआ है, जबकि SERVER_NAME सर्वर विन्यास से निर्धारित होता है।

+0

$ _SERVER ['HTTP_HOST'] "आपको डोमेन नाम देता है जिसके माध्यम से वर्तमान अनुरोध पूरा हो रहा है और यह अनुरोध से अधिक संबंधित है।" +1 धन्यवाद !!!! और आधिकारिक दस्तावेज़ से जुड़े लोगों के लिए धन्यवाद, लेकिन मेरे लिए बहुत जटिल;) – Eman

+0

@ माइक, यह केवल 'SERVER_NAME' नहीं है जो सर्वर कॉन्फ़िगरेशन पर निर्भर करता है। ['HTTP_HOST' भी इस पर निर्भर करता है।] (Http://stackoverflow.com/a/28889208/632951) – Pacerier

1

HTTP_HOST ग्राहक द्वारा भेजे गए Host: शीर्षलेख है। नतीजतन, यह थोड़ा कम भरोसेमंद हो सकता है। उपयोगकर्ता इनपुट के बावजूद SERVER_NAME आपके सर्वर की कॉन्फ़िगरेशन द्वारा निर्धारित किया गया है।

व्यवहार में अंतर सूक्ष्म है। कुछ अच्छे उदाहरण यहां प्रदर्शन कर रहे हैं: http://shiflett.org/blog/2006/mar/server-name-versus-http-host

The docs explain this well

'SERVER_NAME' सर्वर होस्ट जिसके तहत वर्तमान स्क्रिप्ट पर कार्य कर रहा है का नाम है। यदि वर्चुअल होस्ट पर स्क्रिप्ट चल रही है, तो यह उस वर्चुअल होस्ट के लिए परिभाषित मान होगा।

'HTTP_HOST' होस्ट की सामग्री: वर्तमान अनुरोध से शीर्षलेख, यदि कोई है तो। होस्ट की

+0

आपका निष्कर्ष गलत है। 'SERVER_NAME' आपके सर्वर की कॉन्फ़िगरेशन द्वारा निर्धारित किया गया है, और [उपयोगकर्ता * इनपुट पर निर्भर करता है (वास्तव में * यह * डिफ़ॉल्ट व्यवहार है)] (http://stackoverflow.com/a/28889208/632951)। – Pacerier

+0

HTTP_HOST बनाम SERVER_NAME के ​​subtleties का एक अच्छा उदाहरण यहां प्रदर्शित किया गया है: http://shiflett.org/blog/2006/mar/server-name-versus-http-host –

+0

हां यह http: // stackoverflow से वही है .com/a/1459794/632951। 'SERVER_NAME' सर्वर की कॉन्फ़िगरेशन द्वारा निर्धारित किया जाता है, और उपयोगकर्ता इनपुट पर निर्भर करने के लिए बनाया जा सकता है। – Pacerier

0

HTTP_HOST

सामग्री: वर्तमान अनुरोध से हैडर, अगर वहाँ एक है।

SERVER_NAME

सर्वर होस्ट जिसके तहत वर्तमान स्क्रिप्ट पर कार्य कर रहा है का नाम है। यदि वर्चुअल होस्ट पर स्क्रिप्ट चल रही है, तो यह उस वर्चुअल होस्ट के लिए परिभाषित मान होगा।

http://php.net/manual/en/reserved.variables.server.php

+0

बेशक आउटपुट समान नहीं है ........ – Pacerier

संबंधित मुद्दे