为什么getenv('REMOTE_ADDR')给我一个空白的IP地址?
问题描述:
这个PHP代码...为什么getenv('REMOTE_ADDR')给我一个空白的IP地址?
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]:地址是 不是在ABCD形式C:\ inetpub ... \ filename.php on line
看来$ ip是空白。
答
它说以下内容:
功能
getenv
如果你的服务器API不起作用是ASAPI(IIS)。 因此,尽量不要使用getenv('REMOTE_ADDR')
,而是使用$_SERVER["REMOTE_ADDR"]
。
你也许试着去做$_SERVER
?
答
你为什么不上php.net使用
$_SERVER['REMOTE_ADDR']
和
$_SERVER['HTTP_X_FORWARDED_FOR']
答
首先,GETENV()以一个字符串作为参数。上线207,你应该使用:
getenv('HTTP_X_FORWARDED_FOR')
...而不是:
getenv(HTTP_X_FORWARDED_FOR)
其次,通过$ _ SERVER访问这些变量是一个更可靠的解决方案,为getenv()往往显示不同在不同平台上的行为。
而且,这些变量可能不会,如果你是通过CLI运行此脚本工作。
尝试的var_dump($ IP);并查看变量包含的内容。
答
已经给出了一个更好的解决方案。但还是:
getenv('HTTP_X_FORWARD_FOR');
应该
getenv('HTTP_X_FORWARDED_FOR');
是啊...有时电脑想拥有他们了解;-)
串