繁体   English   中英

如何在PHP中获取用户的IP地址?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM