【问题标题】:PHP getenv('REMOTE_ADDR') serious side effects?PHP getenv('REMOTE_ADDR') 严重的副作用?
【发布时间】:2010-11-25 22:41:39
【问题描述】:

我正在尝试获取用户的 IP 地址,以便向他们展示与其地理位置相关的内容。我使用了 php 代码 $ip = getenv('REMOTE_ADDR');获取他们的 IP 地址。这在我的计算机上运行良好,但我的共同开发人员尝试了它,发现他根本无法连接到我们的网站并出现“主机不可访问”错误。他也无法通过 FTP 或从他家中的另一台计算机连接到我们的站点。

我取出这段代码,他仍然无法连接(但可以使用代理)。我想知道为什么这段代码会有这些副作用。是 $_SERVER('REMOTE_ADDR')。在 PHP 中获取用户 IP 地址的最佳方法是什么?

谢谢

罗斯

【问题讨论】:

    标签: php ip-address ip


    【解决方案1】:
    1. 该代码没有副作用。您的同事看到的问题很可能是防火墙/连接/服务器配置问题。
    2. 使用 $_SERVER 确实是获取这些变量值的正确方法。

    【讨论】:

      【解决方案2】:

      我责怪你的共同开发者 DNS 或 /etc/hosts 设置。

      【讨论】:

        【解决方案3】:

        http://thephpcode.blogspot.com/2009/01/php-getting-secondary-internet-protocol.html

        function getIP() {
          $IP = '';
          if (getenv('HTTP_CLIENT_IP')) {
            $IP =getenv('HTTP_CLIENT_IP');
          } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
            $IP =getenv('HTTP_X_FORWARDED_FOR');
          } elseif (getenv('HTTP_X_FORWARDED')) {
            $IP =getenv('HTTP_X_FORWARDED');
          } elseif (getenv('HTTP_FORWARDED_FOR')) {
            $IP =getenv('HTTP_FORWARDED_FOR');
          } elseif (getenv('HTTP_FORWARDED')) {
            $IP = getenv('HTTP_FORWARDED');
          } else {
            $IP = $_SERVER['REMOTE_ADDR'];
          }
        return $IP;
        }
        

        至少这段代码可以让你得到实际的 IP 地址,即使是来自 ISP 代理等背后的用户。

        【讨论】:

        • 请注意,HTTP_X_FORWARDED_FOR 可能包含多个地址。
        • 如果你得到一个字符串,为什么不呢?但是 MahtieuK - 很好。
        猜你喜欢
        • 1970-01-01
        • 2010-09-15
        • 1970-01-01
        • 2012-02-06
        • 2011-02-06
        • 2011-08-29
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        相关资源
        最近更新 更多