为什么getenv('REMOTE_ADDR')给我一个空白的IP地址?

时间:2008-10-06 13:59:22

标签: php ip-address

这个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.php 中的a.b.c.d形式 212

似乎 $ ip 是空白的。

4 个答案:

答案 0 :(得分:11)

在php.net上它说如下:

  

如果您的服务器API是ASAPI(IIS),则函数getenv不起作用。   因此,请尝试不要使用getenv('REMOTE_ADDR'),而应使用$_SERVER["REMOTE_ADDR"]

您是否可以尝试使用$_SERVER

答案 1 :(得分:4)

为什么不使用

$_SERVER['REMOTE_ADDR'] 

$_SERVER['HTTP_X_FORWARDED_FOR']

答案 2 :(得分:2)

已经给出了更好的解决方案。但仍然:

getenv('HTTP_X_FORWARD_FOR');

应该是

getenv('HTTP_X_FORWARDED_FOR');

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

答案 3 :(得分:1)

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

getenv('HTTP_X_FORWARDED_FOR')

...而不是:

getenv(HTTP_X_FORWARDED_FOR)

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

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

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