जवाबों:
सर्वर आईपी के लिए इस तरह:
$_SERVER['SERVER_ADDR'];
और इस बंदरगाह के लिए
$_SERVER['SERVER_PORT'];
John K
इसके बजाय उत्तर का उपयोग करें
यदि आप PHP संस्करण 5.3 या उच्चतर का उपयोग कर रहे हैं, तो आप निम्न कार्य कर सकते हैं:
$host= gethostname();
$ip = gethostbyname($host);
जब आप स्टैंड-अलोन स्क्रिप्ट चला रहे होते हैं, तो यह वेब सर्वर के माध्यम से नहीं चल रहा होता है।
/etc/hosts
फ़ाइल में होना चाहिए और तेज़ होगा - हालाँकि यह अभी हो सकता है 127.0.0.1
। अगर इसे DNS को कॉल करना है तो यह आपके कहे अनुसार धीमा होगा।
उदाहरण के लिए:
$_SERVER['SERVER_ADDR']
जब आपका IIS पर, प्रयास करें:
$_SERVER['LOCAL_ADDR']
$_SERVER['LOCAL_ADDR']
केवल IIS के तहत उपलब्ध है जब PHP एक CGI मॉड्यूल के रूप में चल रहा है।
मैं इस पृष्ठ पर आया था कि मुझे अपना आईपी पता प्राप्त करने का एक तरीका मिल रहा था, जो दूरस्थ मशीन से कनेक्ट नहीं था।
यह विंडोज़ मशीन के लिए काम नहीं करेगा।
लेकिन मामले में किसी को मैं क्या देख रहा था के लिए खोज करता है:
#! /usr/bin/php
<?php
$my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'");
echo $my_current_ip;
(बेशर्मी से कैसे मैं लिनक्स और ओएस एक्स पर स्थानीय मशीन का प्राथमिक आईपी पता प्राप्त कर सकता हूं? )
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | grep -e '192\.168\.1\.'
अधिकांश अप-वोट किए गए उत्तरों में से कोई भी सर्वर के सार्वजनिक पते को मज़बूती से वापस नहीं करेगा। आम तौर पर $_SERVER['SERVER_ADDR']
सही होगा, लेकिन अगर आप वीपीएन के माध्यम से सर्वर तक पहुंच रहे हैं, तो यह संभवतः सार्वजनिक पते के बजाय आंतरिक नेटवर्क पते को वापस कर देगा, और यहां तक कि जब एक ही नेटवर्क पर नहीं तो कुछ कॉन्फ़िगरेशन केवल रिक्त होंगे या कुछ अन्य निर्दिष्ट होंगे मूल्य।
इसी तरह, ऐसे परिदृश्य $host= gethostname(); $ip = gethostbyname($host);
हैं जो सही मान नहीं लौटाएंगे क्योंकि यह दोनों DNS (या तो आंतरिक रूप से कॉन्फ़िगर या बाहरी रिकॉर्ड) पर निर्भर है और सर्वर के होस्टनाम सेटिंग्स को सर्वर के आईपी पते को एक्सट्रपलेट करने के लिए है। ये दोनों कदम संभावित रूप से दोषपूर्ण हैं। उदाहरण के लिए, यदि सर्वर का होस्टनाम एक डोमेन नाम (यानी HOSTNAME=yahoo.com
) की तरह स्वरूपित है, तो (कम से कम मेरे php5.4 / Centos6 सेटअप पर) gethostbyname
स्थानीय सर्वर के बजाय Yahoo.com के पते को खोजने के लिए सीधे छोड़ देगा।
इसके अलावा, क्योंकि gethostbyname
सार्वजनिक DNS पर वापस आता है अप्रकाशित या गलत सार्वजनिक DNS रिकॉर्ड के साथ एक परीक्षण सर्वर रिकॉर्ड करता है (उदाहरण के लिए, आप सर्वर को localhost
आईपी पते से या यदि आप अपनी स्थानीय hosts
फ़ाइल का उपयोग करके सार्वजनिक DNS को ओवरराइड कर रहे हैं ) तो आप ' वापस कोई भी IP पता नहीं मिलेगा (यह सिर्फ hostname लौटाएगा) या इससे भी बदतर यह सार्वजनिक DNS रिकॉर्ड में निर्दिष्ट गलत पता वापस कर देगा यदि कोई मौजूद है या यदि डोमेन के लिए वाइल्डकार्ड है।
स्थिति के आधार पर, आप कुछ ऐसा करके तीसरे दृष्टिकोण की कोशिश कर सकते हैं:
$external_ip = exec('curl http://ipecho.net/plain; echo');
इसकी अपनी खामियां हैं (एक विशिष्ट तृतीय-पक्ष साइट पर निर्भर है, और नेटवर्क सेटिंग्स हो सकती हैं जो एक अलग होस्ट या प्रॉक्सी के माध्यम से आउटबाउंड कनेक्शन को रूट करती हैं) और जैसे gethostbyname
यह धीमा हो सकता है। मुझे ईमानदारी से यकीन नहीं है कि कौन सा दृष्टिकोण सबसे अधिक बार सही होगा, लेकिन दिल से सबक लेने के लिए यह है कि विशिष्ट परिदृश्य / कॉन्फ़िगरेशन इन सभी दृष्टिकोणों के लिए गलत आउटपुट होंगे ... इसलिए यदि संभव हो तो सत्यापित करें कि दृष्टिकोण आप कर रहे हैं उपयोग उन मूल्यों को वापस कर रहा है जो आप अपेक्षा करते हैं।
यह वही है जो आप अपने सर्वर पर स्थापित कर्ल के बारे में चिंता किए बिना उपरोक्त उदाहरणों के अनुकूलन के रूप में उपयोग कर सकते हैं।
<?php
// create a new cURL resource
$ch = curl_init ();
// set URL and other appropriate options
curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL and pass it to the browser
$ip = curl_exec ($ch);
echo "The public ip for this server is: $ip";
// close cURL resource, and free up system resources
curl_close ($ch);
?>
यदि आप bash शेल में PHP का उपयोग कर रहे हैं तो आप उपयोग कर सकते हैं:
$server_name=exec('hostname');
क्योंकि $_SERVER[] SERVER_ADDR
, HTTP_HOST
और SERVER_NAME
सेट नहीं हैं।
मुझे यह मेरे लिए काम करने के लिए मिला: GetHostByName ("");
Windows 7 पर अपाचे वेबसर्वर चल XAMPP v1.7.1। दुर्भाग्य से यह सिर्फ मेरा गेटवे आईपी पता देता है।
मैंने अभी एक साधारण स्क्रिप्ट बनाई है जो $ _SERVER ['REMOTE_ADDR'] और $ _SERVER ['SERVER_ADDR'] को IIS में वापस लाएगी ताकि आपको हर चर को बदलना न पड़े। बस इस पाठ को अपनी php फ़ाइल में पेस्ट करें जो हर पेज में शामिल है।
/** IIS IP Check **/
if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; }
if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }
$ _SERVER सरणी की जाँच करें
echo $_SERVER['SERVER_ADDR'];
$_SERVER["SERVER_ADDR"]
HTTP हेडर से कोई लेना देना नहीं है। यह सर्वर सॉफ्टवेयर द्वारा भरा गया है, $ _SERVER में सभी HTTP संबंधित सामान HTTP_ के साथ पूर्वनिर्मित है। php.net/manual/en/reserved.variables.server.php
ऐशे ही:
$_SERVER['SERVER_ADDR'];