2009-11-29 34 views

回答

39

您可以通過使用gethostname

+13

謝謝 - 這很好:我的解決方案是:getHostByName(getHostName()) ; – ChronoFish 2009-11-29 04:35:20

+0

這是一個5.3解決方案 - 但幸運的是我正在運行5.3 – ChronoFish 2009-11-29 04:36:07

+1

在頁面底部有<5.3的評論。 – 2009-11-30 04:08:57

3

如果一切都失敗了,你總是可以exec IPCONFIG或使用ifconfig,根據您的平臺,並解析結果。

+0

如果我沒有運行5.3,我會回落在這樣的一個操作系統級解決方案的服務器的IP地址。謝謝! – ChronoFish 2009-11-29 04:39:30

+0

不知道如何可靠,但你可以跳過exec()並使用php_uname('n')來拉動主機名傳遞給getHostByName() – joshtronic 2011-03-31 01:45:00

14

得到的主機名。如果您正在使用PHP < 5.3工作,這可能會幫助(在* NIX的系統ATLEAST):

[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

謝謝 - 我喜歡你的Linux/Unix解決方案,但對於這個應用程序,我在Windows上運行...(是的,我知道... Windows上的PHP CLI ?!)。網絡服務很好理解 - 當我需要「防火牆IP之外」時,我必須記住它。 – ChronoFish 2009-11-29 04:44:20

8

我知道這是一個相當古老的問題,但似乎不是T o是一個明確的答案(儘可能多)。我需要在* NIX盒子和Win X盒子上確定這個值。同樣來自CLI執行的腳本以及非CLI腳本。以下功能是我所想到的最好的功能,它借用了多年來人們所說的不同概念。也許這可能是一些使用的:

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

SHOW 192.168.1.1 :) – user956584 2012-03-24 16:31:35

+0

作品!謝謝! – Oniz 2013-08-09 09:41:39

+1

它不適用於我:127.0.1.1 ... – Besnik 2013-09-19 10:08:53