PHP:获取IP地址

3

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

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

更新:

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


4
以「HTTP」开头的内容可能被伪造。 - Frank Farmer
3个回答

5

$_SERVER['REMOTE_ADDR'];

根据 PHP文档: 用户查看当前页面的IP地址。
这是连接到您的服务器的IP地址(由您的服务器报告)。 其他值由客户端设置。 HTTP_X_FORWARDED_FOR是非标准标头(因此带有x前缀),由某些代理服务器设置。 这是大型代理服务器供应商试图帮助ISP识别滥用IP地址的尝试; 它包含所有转发的IP列表。
我不知道HTTP_CLIENT_IP标头的来源。

2

这取决于您的应用是否在反向代理或类似的环境下。最简单的方法是检查所有三个选项,并选择不是您IP地址之一的选项。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接