我必须从 获取远程 url 主机名server
script
,以下哪个更可靠:
gethostbyaddr($_SERVER['REMOTE_ADDR'])
或者$_SERVER['REMOTE_HOST']
我必须从 获取远程 url 主机名server
script
,以下哪个更可靠:
gethostbyaddr($_SERVER['REMOTE_ADDR'])
或者$_SERVER['REMOTE_HOST']
这与可靠性无关。尽管在某些情况下它们可能包含相同的值,但这两个变量并不相同。让我解释:
$_SERVER['REMOTE_ADDR']
在所有情况下都将包含远程主机的 IP 地址,其中
$_SERVER['REMOTE_HOST']
如果启用了 DNS 解析,将包含 DNS 主机名(如果HostnameLookups
Apache 指令设置为On
,感谢@Pekka)。如果它被禁用,那么$_SERVER['REMOTE_HOST']
将包含 IP 地址,这就是您可能观察到的。
您的代码应如下所示:
$host = $_SERVER['REMOTE_HOST'];
// if both are the same, HostnameLookups seems to be disabled.
if($host === $_SERVER['REMOTE_ADDR']) {
// get the host name per dns call
$host = gethostbyaddr($_SERVER['REMOTE_ADDR'])
}
注意:如果您可以控制 apache 指令,我建议您出于性能原因将其关闭并获取主机名 - 仅在需要时 - 使用gethostbyaddr()
$_SERVER['REMOTE_HOST']
仅当HostnameLookups
Apache 指令设置为On
.
您可以先检查$_SERVER['REMOTE_HOST']
,如果未设置,请进行主机名查找。
两者可能同样可靠,因为它们将在内部使用相同的查找机制。有关此信息的一般可靠性,请参阅PHP 的 $_SERVER['REMOTE_ADDR'] 的可靠性
请注意,主机名查找可能非常缓慢。除非你有充分的理由,否则不要这样做。