Геолокація клієнта

Скрипти для визначення місця перебування клієнта за допомогою технології IP-геолокації та зворотного виклику в Інтернеті, які обробляють запити на основі IP-адреси. Огляд доступних сервісів.

База MaxMind GeoLite

JSON status GeoLite:
Назва Дані Ключ->Значення
Континент North America $ipdat->geoplugin_continentName
Країна United States $ipdat->geoplugin_countryName
Місто Columbus $ipdat->geoplugin_city
Широта 39.9625 $ipdat->geoplugin_latitude
Довгота -83.0061 $ipdat->geoplugin_longitude
Символ валюти Н/Д $ipdat->geoplugin_currencySymbol
Код валюти USD $ipdat->geoplugin_currencyCode
Часовий пояс America/New_York $ipdat->geoplugin_timezone

Ваш публічний IP: 216.73.216.172 Дані отримані з онлайн-сервісу geoPlugin на основі відповіді клієнта. Цей скрипт використовує базу GeoLite2, створену компанією MaxMind. Оскільки сервіс безплатний, параметр City може бути недоступним, але для публічних проксі, VPN або TOR назва міста може відображатися.

Окремого визначення IP не потрібно, оскільки geoPlugin автоматично визначає адресу, з якої надійшов запит.

База IP-api, зворотний виклик

Іноді необхідно виконати зворотний виклик іншим сервером, щоб отримати реальну (за винятком приватної) адресу респондента. При цьому підключення через VPN або TOR не завадить визначити місце входу в мережу.

UkraineIrpin50.5198/30.2617Europe/Kyivip 193.201.217.70LLC IRPIN LOCAL NETWORKS

Дані про користувача IP 193.201.217.70 отримані на безплатному онлайн-сервісі ip-api.com, а зворотний виклик здійснено через сервіс ipify.org. Слід пам’ятати, що IP визначається роутером або маршрутизатором, який першим відповідає на зовнішній запит. Для порівняння за вказаною IP-адресою, перейдіть до відповіді на сторонньому сервісі.

Сервіс IP-api безплатний із обмеженням до 45 запитів на хвилину. Формати відповіді (Response Formats) доступні у JSON, XML, CSV, Newline або PHP, як у прикладі вище. Однак бажано використовувати JSON, оскільки майже всі PHP-сайти підтримують json_decode(), що швидше, ніж unserialize().

JSON status IP-api: 193.201.217.70
ДаніКлюч->Значення
success$data->status
Ukraine$data->country
UA$data->countryCode
32$data->region
Kyiv Oblast$data->regionName
Irpin$data->city
08205$data->zip
50.5198$data->lat
30.2617$data->lon
Europe/Kyiv$data->timezone
LLC IRPIN LOCAL NETWORKS$data->isp
LLC IRPIN LOCAL NETWORKS$data->org
AS43312 LLC IRPIN LOCAL NETWORKS$data->as
193.201.217.70$data->query

Приклад скрипта PHP для виклику повного лістингу з бази даних ip-api.com у форматі JSON наведено нижче.

За потреби $ip_address можна визначити іншим способом, який відповідає вашим задачам, наприклад, через змінну $_SERVER['REMOTE_ADDR']. Однак варто пам’ятати, що вона може повертати IP-адресу проксі або внутрішню адресу, якщо користувач перебуває за NAT чи VPN, тому для точнішого визначення бажано додатково перевіряти HTTP_X_FORWARDED_FOR або HTTP_CLIENT_IP.