8

不知何故$_SERVER['REMOTE_ADDR']返回一个空字符串,我在多个服务器上运行相同的代码(作为脚本的一部分)并且它在其他任何地方都可以工作,它们都是相同的设置。

奇怪的是,当我重新启动 apache 并加载页面时,它只工作一次,如果我重新加载站点 + 之后的所有时间,它就是空的。我让其他人尝试过,同样的结果,空的。

有人建议它与 IPv6 配置有关,我现在完全禁用了 IPv6,但问题仍然存在。

4

3 回答 3

3

如果您在代理服务器后面,则可以使用$_SERVER['HTTP_X_FORWARDED_FOR']or$_SERVER['HTTP_CLIENT_IP']代替$_SERVER['REMOTE_ADDR']. 这将取决于您的代理的配置方式。

于 2013-11-12T12:06:05.127 回答
2

是的,REMOTE_ADDR 可能为空。因此,如果您愿意,可以使用我用来获取基于 HTTP_X_FORWARDED_FOR 的 ip 的代码

<?php
    if(! empty($_SERVER['REMOTE_ADDR']) ){
    $ip = $_SERVER['REMOTE_ADDR'];
}
else{
    $ip = empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : $_SERVER['HTTP_X_FORWARDED_FOR'];
}

我首先检查REMOTE_ADDR因为它更可靠,有时HTTP_X_FORWARDED_FOR可能会被用户欺骗

于 2013-11-30T10:51:10.100 回答
1

我在一个看起来像这样的新 VM 上有代码。它是从 javascript 文件中调用的:

<?php
$hostip = $_SERVER['REMOTE_ADDR'];
?>
var myip = "<?=$hostip ?>";

当然是在旧服务器上工作,我摸索了一会儿,认为 Apache 有问题。是否缺少模块?我找不到一些晦涩的 Apache 设置?我认为 Apache 没有发送服务器变量。直到我尝试了普通的老式方式并且它起作用了:

echo $_SERVER['REMOTE_ADDR'];

结果我不得不编辑 php.ini 并将short_open_tag设置为On。Facepalm - 快捷方式 php 标签不起作用。希望这将有助于节省其他人的时间:)

于 2017-02-12T23:00:37.580 回答