2009-11-29 16 views
31

स्पष्ट (स्थानीयहोस्ट, 127.0.0.1) के अलावा PHP (कमांड लाइन इंटरफेस!) के पास कंप्यूटर के आईपी की खोज के लिए एक तंत्र है, जिस पर स्क्रिप्ट चल रही है ?मैं अपने सर्वर का आईपी पता PHP (सीएलआई)

$_SERVER[*] काम नहीं करेगा क्योंकि यह एक वेब ऐप नहीं है - यह एक कमांड लाइन स्क्रिप्ट है।

TIA

उत्तर

39

आप gethostname

+13

पर पास करने के लिए होस्टनाम खींचने के लिए php_uname ('n') का उपयोग कर सकते हैं धन्यवाद - यह बहुत अच्छा था: मेरा समाधान था: getHostByName (getHostName()) ; – ChronoFish

+0

यह 5.3 समाधान है - लेकिन शुक्र है कि मैं 5.3 – ChronoFish

+1

चला रहा हूं <5.3 के लिए पृष्ठ के नीचे एक टिप्पणी है। –

3

यदि सब और विफल रहता है, तो आप हमेशा exec ipconfig या ifconfig, आपके प्लेटफ़ॉर्म पर निर्भर कर सकता है, और परिणाम को पार्स।

+0

मैं 5.3 मैं वापस इस तरह एक OS स्तर समाधान पर गिर जाते, उन्हें नहीं चल रहा था के आईपी पते लौटना चाहिए: शायद यह कुछ काम का हो सकता है । धन्यवाद! – ChronoFish

+0

यह सुनिश्चित नहीं करता कि कितना भरोसेमंद है, लेकिन आप exec() को छोड़ सकते हैं और होस्टबिननाम() – joshtronic

14

का उपयोग करके होस्ट नाम प्राप्त कर सकते हैं आप PHP < 5.3 के साथ काम कर रहे हैं, तो यह (* NIX आधारित सिस्टम कम से कम पर) मदद मिल सकती है:

[email protected]:~$ cat test.php 
#!/usr/bin/env php 
<?php 

function getIPs($withV6 = true) { 
    preg_match_all('/inet'.($withV6 ? '6?' : '').' addr: ?([^ ]+)/', `ifconfig`, $ips); 
    return $ips[1]; 
} 

$ips = getIPs(); 
var_dump($ips); 

[email protected]:~$ ./test.php 
array(5) { 
    [0]=> 
    string(13) "72.67.113.141" 
    [1]=> 
    string(27) "fe80::21c:c0ff:fe4a:d09d/64" 
    [2]=> 
    string(13) "72.67.113.140" 
    [3]=> 
    string(9) "127.0.0.1" 
    [4]=> 
    string(7) "::1/128" 
} 
[email protected]:~$ 

या, यदि आप डॉन ' टी यह अक्सर कर रही आशा, तो शायद यह (बस इसे का दुरुपयोग न करें) काम करेगा:

$ip = file_get_contents('http://whatismyip.org/'); 
+0

धन्यवाद - मुझे आपके लिनक्स/यूनिक्स समाधान पसंद हैं लेकिन इस ऐप के लिए मैं विंडोज़ पर चल रहा हूं ... (हाँ मुझे पता है ... विंडोज़ पर PHP सीएलआई ?!)। Webservice के बारे में जानना अच्छा है - मुझे इसे "फ़ायरवॉल आईपी के बाहर" की आवश्यकता होने पर ध्यान में रखना होगा :)। – ChronoFish

8

मैं जानता हूँ कि यह एक काफी पुराने सवाल है, लेकिन टी वहाँ प्रतीत नहीं होता o एक निश्चित उत्तर हो (जितना संभव हो सके।) मुझे * NIX बक्से और विन एक्स बॉक्स पर, इस मान को निर्धारित करने की आवश्यकता है। सीएलआई निष्पादित लिपि के साथ-साथ गैर-सीएलआई स्क्रिप्ट से भी। निम्नलिखित कार्य सबसे अच्छा है जिसके साथ मैंने आना शुरू किया है, जो वर्षों से लोगों की विभिन्न अवधारणाओं पर आधारित है।

function getServerAddress() { 
    if(isset($_SERVER["SERVER_ADDR"])) 
    return $_SERVER["SERVER_ADDR"]; 
    else { 
    // Running CLI 
    if(stristr(PHP_OS, 'WIN')) { 
     // Rather hacky way to handle windows servers 
     exec('ipconfig /all', $catch); 
     foreach($catch as $line) { 
     if(eregi('IP Address', $line)) { 
      // Have seen exec return "multi-line" content, so another hack. 
      if(count($lineCount = split(':', $line)) == 1) { 
      list($t, $ip) = split(':', $line); 
      $ip = trim($ip); 
      } else { 
      $parts = explode('IP Address', $line); 
      $parts = explode('Subnet Mask', $parts[1]); 
      $parts = explode(': ', $parts[0]); 
      $ip = trim($parts[1]); 
      } 
      if(ip2long($ip > 0)) { 
      echo 'IP is '.$ip."\n"; 
      return $ip; 
      } else 
      ; // TODO: Handle this failure condition. 
     } 
     } 
    } else { 
     $ifconfig = shell_exec('/sbin/ifconfig eth0'); 
     preg_match('/addr:([\d\.]+)/', $ifconfig, $match); 
     return $match[1]; 
    } 
    } 
} 
28

यह कोशिश यह सर्वर

$host= gethostname(); 
$ip = gethostbyname($host); 
+1

दिखाएं 1 9 2.168.1.1 :) – user956584

+0

काम करता है! धन्यवाद! – Oniz

+1

यह मेरे लिए काम नहीं करता है: 127.0.1.1 ... – Besnik

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