【问题标题】:php: getting ip addressphp:获取IP地址
【发布时间】: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”开头的东西都可能是伪造的。

标签: php http-headers


【解决方案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;
                 }
              }
           }
         }
       }
      

      【讨论】:

        猜你喜欢
        • 2010-12-15
        • 1970-01-01
        • 2013-07-07
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        • 2013-01-16
        相关资源
        最近更新 更多