Определение местоположения посетителя по IP-адресу в PHP

Несколько способов определить примерное местоположение пользователя по IP-адресу.

1

Sypex Geo – продукт для определение местоположения посетителя по IP-адресу, распространяется по лицензии BSD, т. е. является абсолютно бесплатным. Получив IP-адрес, Sypex Geo выдает информацию о местоположении посетителя – страну, регион, город, географические координаты из локальной базы данных, которая периодически обновляется.

Пример использования:

<?php
include_once __DIR__ . '/SxGeo/SxGeo.php';
$SxGeo = new SxGeo(__DIR__ . '/SxGeo/SxGeoCity.dat', SXGEO_BATCH | SXGEO_MEMORY); 			
$res = $SxGeo->getCityFull($_SERVER['REMOTE_ADDR']); 		
print_r($res);
PHP

Результат:

Array
(
    [city] => Array
        (
            [id] => 4207400
            [lat] => 3284069
            [lon] => -8363240
            [name_ru] => Макон
            [name_en] => Macon
        )

    [region] => Array
        (
            [id] => 4197000
            [name_ru] => Джорджия
            [name_en] => Georgia
            [iso] => US-GA
        )

    [country] => Array
        (
            [id] => 225
            [iso] => US
            [lat] => 3976
            [lon] => -9850
            [name_ru] => США
            [name_en] => United States
        )

)
2

IP Geolocation API – бесплатен для некоммерческого использования, ключ к API не требуется. Сервис возвращает данные в формате JSON, XML, CSV, Newline, PHP (serialize) по GET-запросу.

Ограничения

45 запросов в минуту с одного IP-адреса, при превышении лимита будет отдаваться 429-я ошибка до тех пор, пока не будет сброшено ограничение. Если вы постоянно превышаете лимит, ваш IP-адрес будет заблокирован на 1 час.

Пример использования:

<?php
$ch = curl_init('http://ip-api.com/json/' . $_SERVER['REMOTE_ADDR'] . '?lang=ru');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
 
$res = json_decode($res, true);
print_r($res);
PHP

Результат:

Array
(
    [status] => success
    [country] => США
    [countryCode] => US
    [region] => VA
    [regionName] => Виргиния
    [city] => Ашберн
    [zip] => 20149
    [lat] => 39,0438
    [lon] => -77,4874
    [timezone] => America/New_York
    [isp] => BellSouth.net Inc.
    [org] => AWS EC2 (us-east-1)
    [as] => AS14618 Amazon.com, Inc.
    [query] => 98.80.143.34
)
3

Среди разделов сайта «DaData.ru» есть сервис «Город по IP-адресу», после регистрации по ключу можно получить детальную информацию о городе, в том числе почтовый индекс.

Бесплатен до 10 000 запросов в сутки, максимум 20 запросов в секунду.

<?php
$ch = curl_init('https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address?ip=' . $_SERVER['REMOTE_ADDR']);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
 
$res = json_decode($res, true);
print_r($res);
PHP

Результат:

Array
(
    [location] => 
)
25.09.2020, обновлено 19.03.2024
32593

Комментарии 1

Иван Иван
18 декабря 2022 в 14:05
Ни один из представленных сервисов не определяет корректно город. Вот этот (не реклама, может кому-то будет полезно) ещё более менее, но тоже неточно: https://www.ipinfodb.com/ Определил соседний город. Для справки - живу в МО 35км от москвы.

, чтобы добавить комментарий.

Другие публикации

Фильтрация IP-адресов
Примеры как запретить доступ к сайту по IP-адресам в PHP и htaccess.
14621
+2
Получить DNS записи домена в PHP
Функция dns_get_record($domain) поучает все записи домена, подробнее на php.net.
5319
0
Whois, как получить данные IP-адреса и домена в PHP
Несколько примеров как в PHP получить информацию о домене и IP-адресе.
20641
+6
Массив $_SERVER
Описание значений глобального массива $_SERVER с примерами.
56977
+4
Список стран мира с названиями на национальном языке
Ниже представлен список стран мира с названиями на русском и государственных языках, коды регионов ISO 3166-1 Alpha 2 и...
12658
+5
Таблица Alt-кодов
Alt-код – метод вставки символа сочетанием нажатой клавиши Alt и числа, набранного на цифровой клавиатуре (Num Lock должен быть включен).
35370
+5