Как получить локальный ip адрес клиента?

179
06 февраля 2018, 10:00

Хочу сделать небольшой опросник, в котором для уникальности каждого конкретного пользователя, используется его локальный ip-адрес. Сайт находится на локальном веб-сервере (OpenServer). Когда пытаюсь получить ip-адрес клиента (пользователя), всегда выводит 127.0.0.1, хотя адрес моего пк совсем другой. Я понимаю, что Request::ip() прекрасно заработал бы, если сайт лежал на каком-нибудь хостинге, но как быть в моем случае? Можно ли как то выделить уникальность каждого локального пользователя? Всем большое спасибо за ответы!

Answer 1

Вы можете использовать любую из следующих двух функций.

Обе функции эквивалентны разнице только в том, как и откуда извлекаются значения.

Первый getenv() используется для получения значений из переменных среды PHP, а второй - $ _SERVER используется для получения значений с веб-сервера (например - apache).

Вариант с использованием getenv().

function get_client_ip_env() {
    $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;
}

Вариант второй с использованием $ _SERVER.

function get_client_ip_server() {
    $ipaddress = '';
    if ($_SERVER['HTTP_CLIENT_IP'])
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if($_SERVER['HTTP_X_FORWARDED_FOR'])
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if($_SERVER['HTTP_X_FORWARDED'])
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if($_SERVER['HTTP_FORWARDED_FOR'])
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if($_SERVER['HTTP_FORWARDED'])
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if($_SERVER['REMOTE_ADDR'])
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

Примечание. HTTP_X_FORWARDED_FOR иногда возвращает внутренний или локальный IP-адрес, что обычно не полезно. Кроме того, он будет возвращать список, разделенный запятыми, если он был переадресован из нескольких IP-адресов.

READ ALSO
Имитировать переход на сайт от лица сервера

Имитировать переход на сайт от лица сервера

Есть ссылка на сайт, перейдя по которой на сайте выполняется определенное действиеНа этот сайт открыт доступ только некоторым ip (моему серверу)...

158
cURL отправка файла через URL

cURL отправка файла через URL

Нужно отправить файл (изображение) на этот сайтУ них есть API

152