【问题标题】:Why is getenv('REMOTE_ADDR') giving me a blank IP address?为什么 getenv('REMOTE_ADDR') 给我一个空白 IP 地址?
【发布时间】:2010-09-15 12:30:12
【问题描述】:

这个 PHP 代码...

207    if (getenv(HTTP_X_FORWARDED_FOR)) {
208        $ip   = getenv('HTTP_X_FORWARD_FOR');
209        $host = gethostbyaddr($ip);
210    } else {
211        $ip   = getenv('REMOTE_ADDR');
212        $host = gethostbyaddr($ip);
213    }

抛出此警告...

警告: gethostbyaddr() [function.gethostbyaddr]:地址是 不在 C:\inetpub...\filename.php212

中的 a.b.c.d 形式

$ip 好像是空白的。

【问题讨论】:

    标签: php ip-address


    【解决方案1】:

    在 php.net 上它说:

    如果您的服务器 API 是 ASAPI (IIS),则函数 getenv 不起作用。 所以,尽量不要使用getenv('REMOTE_ADDR'),而是$_SERVER["REMOTE_ADDR"]

    您是否尝试过使用$_SERVER

    【讨论】:

      【解决方案2】:

      已经给出了更好的解决方案。但还是:

      getenv('HTTP_X_FORWARD_FOR');
      

      应该是

      getenv('HTTP_X_FORWARDED_FOR');
      

      是的...有时计算机想要他们理解的字符串;-)

      【讨论】:

        【解决方案3】:

        首先,getenv() 接受一个字符串作为参数。在第 207 行,您应该使用:

        getenv('HTTP_X_FORWARDED_FOR')
        

        ...而不是:

        getenv(HTTP_X_FORWARDED_FOR)
        

        其次,通过 $_SERVER 访问这些变量是一种更可靠的解决方案,因为 getenv() 往往会在不同的平台上显示不同的行为。

        此外,如果您通过 CLI 运行此脚本,这些变量可能不起作用。

        试试 var_dump($ip);并查看变量包含的内容。

        【讨论】:

          【解决方案4】:

          你为什么不使用

          $_SERVER['REMOTE_ADDR'] 
          

          $_SERVER['HTTP_X_FORWARDED_FOR']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-28
            • 2012-09-23
            • 1970-01-01
            • 2015-06-19
            • 2016-05-12
            • 2021-08-23
            相关资源
            最近更新 更多