Як дізнатися ip клієнта

Як дізнатися ip клієнта

По IP-адресою відвідувача вашого сайту можна дізнатися про нього досить багато — країну, місто, назва та email-адреса інтернет-провайдера, і т.д. Але головна цінність в тому, що IP може служити ідентифікатором відвідувача для серверних скриптів. Нижче описано, яким чином можна визначити IP-адресу засобами мови PHP.

Вам знадобиться

Базове знання мови PHP

Інструкція

  1. Для витягання IP-адреси із заголовків, які присилаються на сервер запитів браузера, слід використовувати функцію getenv. Вона читає з змінних середовища зазначені їй значення. Для зберігання IP-адреси відвідувача призначена змінна з ім’ям REMOTE_ADDR. Проте клієнт може використовувати проксі-сервер, а в цьому випадку в змінної буде міститися його адресу, а зовсім не той, який вам потрібен. Дізнатися, що веб-серфер використовує проміжний IP, можна із змінної оточення з ім’ям HTTP_VIA. У неї через кому поміщаються всі адреси задіяних у ланцюжку проксі-серверів. Адреса відвідувача проміжні сервери зобов’язані поміщати в змінну з ім’ям HTTP_X_FORWARDED_FOR, проте це повністю залежить від налаштувань проксі. Значить, щоб охопити якомога більше можливостей визначення IP-адреси, треба перевіряти вміст як мінімум трьох змінних: REMOTE_ADDR, HTTP_X_FORWARDED_FOR і ще бажано HTTP_CLIENT_IP.
  2. Об’єднати перевірку всіх трьох змінних в один рядок PHP-коду можна, наприклад, так:

    $ IpAddr = getenv (‘HTTP_CLIENT_IP’) or $ ipAddr = getenv (‘HTTP_X_FORWARDED_FOR’) or $ ipAddr = getenv (‘REMOTE_ADDR’);

    Отримавши таким способом значення IP-адреси, бажано його очистити від можливих спотворень і зайвих символів. Для цього можна використовувати регулярний вираз:

    $ IpAddr = trim (preg_replace (‘#^([^,]+)(,.*)?#’, ‘$ 1′, $ ipAddr));
  3. Залишилося об’єднати обидва рядки коду в одну функцію:

    function getIP () {

    $ IpAddr = getenv (‘HTTP_CLIENT_IP’) or $ ipAddr = getenv (‘HTTP_X_FORWARDED_FOR’) or $ ipAddr = getenv (‘REMOTE_ADDR’);

    return trim (preg_replace (‘#^([^,]+)(,.*)?#’, ‘$ 1′, $ ipAddr));

    }