2009-11-29 27 views
31

'da nasıl bulabilirim Açıktan (localhost, 127.0.0.1) bir yana, PHP'nin (komut satırı arabirimi!) Betiğin çalıştığı bilgisayarın IP'sini bulmak için bir mekanizması vardır. ? Bu bir Web uygulaması olmadığı için işe yaramayacaktır - bu bir komut satırı betiğidir.Sunucumun IP adresini PHP (CLI)

TIA Eğer her şeyin

cevap

39

Eğer bu (* NIX tabanlı sistemler atleast üzerine) yardımcı olabilir PHP < 5.3 ile çalışıyorsanız Sen gethostname

+13

sayesinde geçmesine hostname çekmek için ('n') php_uname kullanabilirsiniz emin değilim - bu harika oldu: My çözüm oldu: gethostbyname (GetHostName()) ; – ChronoFish

+0

Bu bir 5.3 çözümüdür - ama şükürler olsun 5.3 – ChronoFish

+1

Sayfanın alt kısmında <5.3. –

3

her zaman exec ipconfig veya ifconfig, platformunuza bağlı olabilir, başarısız ve sonucu ayrıştırmak.

+0

Ben 5.3 Böyle bir OS düzeyde bir çözüm geri düşerdi yürütüyor olmasaydı sunucunun ip adresi dönmelidir bu deneyin: Belki bazı kullanım olabilir . Teşekkürler! – ChronoFish

+0

ne kadar güvenilir, ancak exec() atlamak ve gethostbyname'e() geçmek – joshtronic

14

kullanarak hostname alabilirsiniz: Eğer don',

[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]:~$ 

Ya

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

Teşekkürler - Linux/Unix çözümünü beğendim ama bu uygulama için Windows üzerinde çalışıyorum ... (Evet biliyorum ... Windows üzerinde PHP CLI ?!). Web servisini bilmek güzel - "güvenlik duvarı IP dışında" ihtiyacım olduğunda aklımda tutmam gerekecek :). – ChronoFish

8

Ben bu oldukça eski bir soru olduğunu biliyorum, ama t orada görünmüyor: t zaman belki bu (sadece bunu kötüye kullanma) çalışacak, sık sık yapıyor tahmin o kesin bir cevap (olabildiğince). Bu değeri, hem * NIX kutularında hem de Win X kutularında belirlemeye ihtiyacım vardı. Ayrıca CLI tarafından çalıştırılan bir komut dosyasından ve CLI olmayan bir komut dosyasından. Aşağıdaki işlev, insanların en çok konuştukları farklı kavramları ödünç aldığım en iyi şey.

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

o

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

SHOW 192.168.1.1 :) – user956584

+0

İşleri! Teşekkür ederim! – Oniz

+1

Benim için çalışmaz: 127.0.1.1 ... – Besnik

İlgili konular