2010-04-14 233 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; 
      } 
     } 
    } 
    } 
}