$_SERVER['REMOTE_HOST'] 对某些用户为空

$_SERVER['REMOTE_HOST'] empty for some users

我已激活

HostnameLookups Double

在我的 Apache2 配置中,这样我就可以存储用户的远程主机并确保他们的 IP 地址是真实的并且没有被欺骗。

但是,我注意到对于我的 'users'(输入表单的人)中的很多人来说,$_SERVER['REMOTE_HOST'] 只是空的(而对于大多数其他人来说它是非空的) ,尽管有上述配置。这是否意味着这些用户拥有欺骗性的 IP 地址,或者这些用户仍然是诚实的普通用户?还有什么可以解释这个?

不是每个主机都有主机名:)

您可能想使用 'REMOTE_ADDR'

就用这个:

if(isset($_SERVER['REMOTE_HOST'])){//check
    $ip = $_SERVER['REMOTE_HOST'];
}else{
    $ip = $_SERVER['REMOTE_ADDR'];//else assign the real IP
}
echo $ip;

引自 Apache 文档:

The value Double refers to doing double-reverse DNS lookup. That is, after a reverse lookup is performed, a forward lookup is then performed on that result. At least one of the IP addresses in the forward lookup must match the original address. (In "tcpwrappers" terminology this is called PARANOID.)

我怀疑如果正向查找不匹配,则该字段留空。

正如@avnr 所说,IP 地址并不总是有 PTR 记录。

并且在任何情况下都不能确保IP不被欺骗,它只是确保原始IP的DNS配置具有PTR和A记录匹配。

试试这个

$ip = getenv('REMOTE_ADDR'); instead of $_SERVER['REMOTE_ADDR'];

 getenv() is used to get the value of an environment variable in PHP
 $_SERVER is an array contains server variables created by the web server.