php:获取IP地址

Posted

技术标签:

【中文标题】php:获取IP地址【英文标题】:php: getting ip address 【发布时间】:2011-02-07 23:01:52 【问题描述】:

我想获取访问者的 IP 地址。 你能告诉我应该使用$_SERVER[] 的哪个元素吗?

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

更新:

如果您的客户端通过代理服务器连接到 Internet,那么 php 中的 $_SERVER['REMOTE_ADDR'] 只返回代理服务器的 IP 地址,而不是客户端机器的 IP 地址。有额外的服务器变量可能可用于在 PHP 中确定客户端机器的确切 IP 地址,它们是 HTTP_CLIENT_IP 和 HTTP_X_FORWARDED_FOR。

【问题讨论】:

任何以“HTTP”开头的东西都可能是伪造的。 【参考方案1】:

$_SERVER['REMOTE_ADDR'];

根据 the PHP documentation: 用户查看当前页面的 IP 地址。

这是连接到您的服务器的 IP(由您的服务器报告)。 其他值由客户端设置。

HTTP_X_FORWARDED_FOR 是一个非标准标头(因此是 x 前缀),由某些代理服务器设置。这是大型代理服务器供应商帮助 ISP 识别滥用 IP 地址的尝试;它包含一个包含所有转发 IP 的列表。

我不知道HTTP_CLIENT_IP标头的出处

【讨论】:

【参考方案2】:

这取决于您的应用程序是否在反向代理或类似的东西后面。最简单的做法是检查所有三个并选择一个不是您的 IP 之一。

【讨论】:

【参考方案3】:

使用这个:

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;
           
        
     
   
 

【讨论】:

以上是关于php:获取IP地址的主要内容,如果未能解决你的问题,请参考以下文章

php获取了ip地址,用php怎么获取ip的地理位置?请大虾赐教!

PHP获取IP地址的方法,防止伪造IP地址注入攻击

php根据ip地址查地区

PHP 根据ip获取对应的实际地址

PHP获取用户真实IP地址

PHP获取客户端IP地址,服务器IP地址