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

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

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] => 4834157
            [lat] => 4114121
            [lon] => -73,26373
            [name_ru] => Феърфилд
            [name_en] => Fairfield
        )

    [region] => Array
        (
            [id] => 4831725
            [name_ru] => Коннектикут
            [name_en] => Connecticut
            [iso] => US-CT
        )

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

)

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] => Amazon Technologies Inc.
    [org] => AWS EC2 (us-east-1)
    [as] => AS14618 Amazon.com, Inc.
    [query] => 3.236.47.240
)

Среди разделов сайта «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, обновлено 04.12.2021
21828

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

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

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

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

Фильтрация IP-адресов
Примеры как запретить доступ к сайту по IP-адресам в PHP и htaccess.
10430
+1
Получить DNS записи домена в PHP
Функция dns_get_record($domain) поучает все записи домена, подробнее на php.net.
3642
0
Whois, как получить данные IP-адреса и домена в PHP
Несколько примеров как в PHP получить информацию о домене и IP-адресе.
14231
+4
Массив $_SERVER
Описание значений глобального массива $_SERVER с примерами.
34934
+3
Синхронизация файлов между сайтами с помощью Rsync
Такой вопрос возникает когда у сайта есть копия, например региональный сайт или сайт на другом языке, но при этом база...
3512
+2
Вход на сайт через Вконтакте
Многие соцсети позволяют создавать приложения и через API получать данные пользователей, поэтому их использует для быстрой регистрации и авторизации на сайтах.
41811
+10