0

这个 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中的 abcd 格式,第212

似乎$ip是空白的。

4

4 回答 4

11

在 php.net 上它说如下:

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

您是否尝试过这样做$_SERVER

于 2008-10-06T14:09:50.497 回答
4

你为什么不使用

$_SERVER['REMOTE_ADDR'] 

$_SERVER['HTTP_X_FORWARDED_FOR']
于 2008-10-06T14:08:39.050 回答
2

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

getenv('HTTP_X_FORWARD_FOR');

应该

getenv('HTTP_X_FORWARDED_FOR');

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

于 2010-09-28T15:05:32.100 回答
1

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

getenv('HTTP_X_FORWARDED_FOR')

...代替:

getenv(HTTP_X_FORWARDED_FOR)

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

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

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

于 2008-10-06T14:18:08.530 回答