php:获取ip地址

时间:2010-04-14 14:43:09

标签: php http-headers

我想获得一个访客的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。

3 个答案:

答案 0 :(得分:5)

$_SERVER['REMOTE_ADDR'];

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

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

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

我不知道HTTP_CLIENT_IP标题

的来源

答案 1 :(得分:2)

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

答案 2 :(得分:1)

使用此:

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;
           }
        }
     }
   }
 }