[英]How to get a user's IP address in PHP?
我正在使用下面的代码来获取用户的真实IP地址。
function getUserIP () {
if (getenv('HTTP_CLIENT_IP')) {
$ip = getenv('HTTP_CLIENT_IP');
}
elseif (getenv('HTTP_X_FORWARDED_FOR')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif (getenv('HTTP_X_FORWARDED')) {
$ip = getenv('HTTP_X_FORWARDED');
}
elseif (getenv('HTTP_FORWARDED_FOR')) {
$ip = getenv('HTTP_FORWARDED_FOR');
}
elseif (getenv('HTTP_FORWARDED')) {
$ip = getenv('HTTP_FORWARDED');
}
else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$userIP = getUserIP();
有时我得到的IP地址是67.143.220.112, 67.142.171.26
。
那是用户的正确IP地址,还是我必须做其他事情才能获得用户的真实IP地址?
$_SERVER['REMOTE_ADDR'];
提供用户的IP地址。
获取用户IP地址的完美方法。
<?PHP
function getUserIP()
{
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
return $ip;
}
$user_ip = getUserIP();
echo $user_ip; // Output User IP address [Ex: 177.87.193.134]
?>
您可以获得的唯一100%可靠的地址是$_SERVER['REMOTE_ADDR']
。 其他标头是可选的,并非总是存在,并且是伪造的,因为它们仅用于提供信息。
如果用户位于一个或多个代理和/或NAT网关的后面,则即使REMOTE_ADDR也是错误的。 简而言之,没有可靠的方法可以完美地识别用户的真实IP地址,而不管代理/ NAT设置如何。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.