Как получить IP-адрес пользователя в PHP? - PullRequest
1 голос
/ 07 мая 2011

Я использую следующий код для получения реального 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 ]

4 голосов
/ 07 мая 2011

$_SERVER['REMOTE_ADDR']; дает IP-адрес пользователя.

2 голосов
/ 28 ноября 2012

Идеальный способ получить 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]


?>
1 голос
/ 07 мая 2011

Вы можете получить только 100% надежный адрес $_SERVER['REMOTE_ADDR'].Другие заголовки являются необязательными, они не всегда присутствуют и тривиально подделаны, поскольку они являются только информационными.

Даже заголовок REMOTE_ADDR будет неправильным, если пользователь находится за одним или несколькими прокси и / или шлюзами NAT.Короче говоря, не существует надежного способа идеально идентифицировать реальный IP-адрес пользователя независимо от прокси / NAT.

...