不知怎的$_SERVER['REMOTE_ADDR']
返回一个空字符串,我有相同的代码(作为脚本的一部分)在多个服务器上运行,它可以在其他任何地方工作,它们都是相同的设置。
奇怪的是,当我重新启动apache并加载页面时,它只运行一次,如果我重新加载网站+之后的所有时间,它都是空的。我有其他人尝试,同样的结果,空。
有人建议使用IPv6配置,我现在已经完全禁用了IPv6,但问题仍然存在。答案 0 :(得分:3)
如果您在代理服务器后面,则可以使用$_SERVER['HTTP_X_FORWARDED_FOR']
或$_SERVER['HTTP_CLIENT_IP']
代替$_SERVER['REMOTE_ADDR']
。
这取决于您的代理配置方式。
答案 1 :(得分:1)
是的,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
答案 2 :(得分:0)
我在新VM上有代码,看起来像这样。它是从一个javascript文件中调用的:
<?php
$hostip = $_SERVER['REMOTE_ADDR'];
?>
var myip = "<?=$hostip ?>";
当然在旧服务器上工作了一段时间我正在摸不着头脑,认为Apache有问题。有没有模块丢失?我无法找到一些模糊的Apache设置?我认为Apache并没有发送Server变量。直到我尝试了普通的ol&#39;时尚的方式,它的工作原理:
echo $_SERVER['REMOTE_ADDR'];
原来我必须编辑php.ini并将 short_open_tag 设置为开启。 Facepalm - 快捷方式php标签不起作用。希望这将有助于拯救别人的时间:)