2010-04-14 232 views
3

我想獲得一個ip地址的訪問者。 你能告訴我我應該使用什麼樣的元素$_SERVER[]php:geting ip地址

$_SERVER['HTTP_CLIENT_IP']; 
$_SERVER['HTTP_X_FORWARDED_FOR']; 
or 
$_SERVER['REMOTE_ADDR']; 

感謝

UPDATE:

如果您的客戶端是通過代理服務器連接到互聯網,然後$ _ SERVER [ 'REMOTE_ADDR']在PHP僅返回代理的IP地址服務器而不是客戶端的機器。有額外的服務器變量可用於確定客戶機在PHP中的確切IP地址,它們是HTTP_CLIENT_IP和HTTP_X_FORWARDED_FOR。

+4

任何以 'HTTP' 可能是僞造的。 – 2010-04-14 14:46:30

回答

5

$_SERVER['REMOTE_ADDR'];

根據 the PHP documentation: 從用戶正在瀏覽當前頁面的IP地址。

這是連接到您的服務器的IP(報告您的服務器)。
其他值由客戶端設置。

HTTP_X_FORWARDED_FOR是由某些代理服務器設置的非標準頭(因此是x前綴)。大代理服務器供應商試圖幫助ISP識別惡意IP地址;它包含一個包含所有轉發的IP列表。

我不知道HTTP_CLIENT_IP

+0

@Jacco看看更新 – Simon 2010-04-14 14:53:58

2

的起源這取決於你的應用程序背後是一個反向代理或類似的東西。最簡單的做法是檢查全部三項並選擇不是您的IP之一。

0

使用此:

function getIP() { 
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { 
    if (array_key_exists($key, $_SERVER) === true) { 
     foreach (explode(',', $_SERVER[$key]) as $ip) { 
      if (filter_var($ip, FILTER_VALIDATE_IP) !== false) { 
       return $ip; 
      } 
     } 
    } 
    } 
}