Как узнать ip посетителя сайта?

3 ноября 2014 г. Просмотров: 603 Инструкции
Наиболее часто IP-адрес посетителя сайта используют для его идентификации. Но и кроме этого с помощью IP можно получить немало дополнительной информации о посетителе - например, узнать его интернет-провайдера и географическое местонахождение. На практике чаще всего для извлечения IP-адресов из заголовков запросов, присылаемых браузером, используют скрипты на серверном языке PHP.

Вам понадобится

  • Базовое знание языка PHP

Инструкция

  • Используйте встроенную функцию getenv языка PHP для чтения IP-адресов из суперглобального массива переменных окружения.
    В самом простом случае будет достаточно прочесть переменную с названием REMOTE_ADDR. Соответствующий фрагмент PHP-кода может выглядеть так:$userIP = getenv('REMOTE_ADDR');
  • Проверяйте кроме присланной в запросе переменной REMOTE_ADDR и переменные HTTP_VIA и HTTP_X_FORWARDED_FOR. Если посетитель использует прокси-сервер, то промежуточный адрес должен быть записан в обе переменные - и в HTTP_VIA, и в REMOTE_ADDR. В этом случае узнать реальный IP посетителя можно попробовать через HTTP_X_FORWARDED_FOR - в нее прокси-сервер должен помещать исходный адрес. Однако это делается далеко не всегда, и пользователь имеет возможность подбирать «непрозрачный» прокси-сервер, который не передает исходный IP приславшего запрос посетителя. В любом случае вы должны задействовать в своем коде максимум способов получить исходный IP-адрес, добавив еще и проверку переменной HTTP_CLIENT_IP.
  • Объедините в одну строку PHP-кода последовательную проверку трех переменных окружения, которые могут содержать исходный IP-адрес посетителя. Сделать это можно, например, так:$userIP = getenv('HTTP_CLIENT_IP') OR $userIP = getenv('HTTP_X_FORWARDED_FOR') OR $userIP = getenv('REMOTE_ADDR');
  • Удалите из полученного значения IP лишние символы и другой «мусор», который может попасть в переменные окружения. Сделать это можно, например, задействовав встроенные PHP-функции TRIM и preg_replace:$userIP = TRIM(preg_replace('#^([^,]+)(,.*)?#', '$1', $userIP));
  • Объедините весь код в пользовательскую функцию, чтобы иметь возможность обращаться к ней, а не повторять строки проверки и очистки заново в разных частях PHP-скриптов. Например, так:FUNCTION getUserIP() {
  • $userIP = getenv('HTTP_CLIENT_IP') OR $userIP = getenv('HTTP_X_FORWARDED_FOR') OR $userIP = getenv('REMOTE_ADDR');

    RETURN TRIM(preg_replace('#^([^,]+)(,.*)?#', '$1', $userIP));

    }

    Оцените статью!