这个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 是空白的。
答案 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);并查看变量包含的内容。