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

时间:2011-05-07 04:40:06

标签: php ip

我使用下面的代码来获取用户的真实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地址?

3 个答案:

答案 0 :(得分:4)

$_SERVER['REMOTE_ADDR'];提供用户的IP地址。

答案 1 :(得分:2)

获取用户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]


?>

答案 2 :(得分:1)

您可以获得的唯一100%可靠地址是$_SERVER['REMOTE_ADDR']。其他标题是可选的,并不总是存在,并且只是伪造的,因为它们只是信息性的。

如果用户位于一个或多个代理和/或NAT网关后面,即使是REMOTE_ADDR也是错误的。简而言之,无论代理/ NAT如何,都没有完全识别用户真实IP地址的简单方法。