2008-10-06 92 views
0

这个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是空白。

回答

11

它说以下内容:

功能getenv如果你的服务器API不起作用是ASAPI(IIS)。 因此,尽量不要使用getenv('REMOTE_ADDR'),而是使用$_SERVER["REMOTE_ADDR"]

你也许试着去做$_SERVER

4

你为什么不上php.net使用

$_SERVER['REMOTE_ADDR'] 

$_SERVER['HTTP_X_FORWARDED_FOR'] 
1

首先,GETENV()以一个字符串作为参数。上线207,你应该使用:

getenv('HTTP_X_FORWARDED_FOR') 

...而不是:

getenv(HTTP_X_FORWARDED_FOR) 

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

而且,这些变量可能不会,如果你是通过CLI运行此脚本工作。

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

2

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

getenv('HTTP_X_FORWARD_FOR'); 

应该

getenv('HTTP_X_FORWARDED_FOR'); 

是啊...有时电脑想拥有他们了解;-)

相关问题