Определить GEO-данные по IP

Дмитрий16 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
03.04.2018

Можно использовать 

Пакет

https://github.com/maxmind/GeoIP2-php

php composer.phar require geoip2/geoip2:~2.0

или

composer require geoip2/geoip2:~2.0 - находясь в корневой папке приложения

затем скачал бесплатную базу стран с их офф. сайта

https://dev.maxmind.com/geoip/geoip2/geolite2/

Ну и использование примерно такое должно быть:

use GeoIp2\Database\Reader;

$ip = $_SERVER['REMOTE_ADDR'];

try {

$geoReader = new Reader(Yii::getAlias('@app/components/GeoIP2/GeoLite2-Country.mmdb'));

$record = $geoReader->country($ip);

$country_code = $record->country->isoCode;

} catch (\Exception $e) { //or \InvalidArgumentException

$country_code = null;

}

можно и без try .. catch попробовать $geoReader = new Reader(Yii::getAlias('@app/components/GeoIP2/GeoLite2-Country.mmdb'));

$record = $geoReader->country($_SERVER['REMOTE_ADDR']);

$country_code = $record->country->isoCode;

@app/components/GeoIP2/GeoLite2-Country.mmdb - это путь по которому лежит БД geoip2 - это файл с расширением .mmdb

И так же сравнить со вторым способом путем парсинга  через апи

https://api.2ip.ua/geo.json?ip=54.36.148.77

https://api.2ip.ua/provider.json?ip=54.36.148.77

https://api.2ip.ua/hosting.json?site=54.36.148.77

здесь ограничение 1000 запросов в стуки через апи.

Сделать выводы по поводу точности первого и второго метода.

Список ip предоставлю для тестов.