几个月来我一直在使用$_SERVER["REMOTE_ADDR"]
获取用户的 IP 地址。最近,我注意到这个值有时可能包含代理服务器 IP 而不是用户的 IP,这对我来说用处不大。(我在更新到 PHP 7.1.0 后注意到了这个问题,尽管我尝试降级到以前的 PHP 版本并且结果是相同的)。
我已经阅读了大量的 SO 问题,其中大多数只解决了这个问题而没有解决方案,或者提供以下功能作为解决方案:
function get_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
这也是不可靠的,因为这些不同的变量可以被欺骗。
是否有任何良好且可靠的解决方案来获取正确的用户 IP 地址而不是任何中间代理服务器的地址?