В этой статье рассмотрим один из вариантов определения локации пользователя по его IP адресу. А именно, с использованием существующей базы регионов и присвоенным им IP адресов сети.
Существующих баз не мало. Но мне пришлось иметь дело с базой от сайта
Первое что нам понадобится, это скачать файл с БД. Они его предоставляют в формате CSV. И скачать его можно с этой страницы.
Импорт данных файла регионов и IP
Следуйте инструкции в описании, и вы сэкономите время. Т.к. я изначально решил попробовать импортировать данные через phpMyAdmin (используя импорт CSV). И это заняло гораздо больше времени консольный импорт.
Продублирую на всякий случай код. Создаем базу данных и таблицу с локциями:
CREATE DATABASE ip2location; USE ip2location; CREATE TABLE `ip2location_db11`( `ip_from` INT(10) UNSIGNED, `ip_to` INT(10) UNSIGNED, `country_code` CHAR(2), `country_name` VARCHAR(64), `region_name` VARCHAR(128), `city_name` VARCHAR(128), `latitude` DOUBLE, `longitude` DOUBLE, `zip_code` VARCHAR(30), `time_zone` VARCHAR(8), INDEX `idx_ip_from` (`ip_from`), INDEX `idx_ip_to` (`ip_to`), INDEX `idx_ip_from_to` (`ip_from`, `ip_to`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Импортируем данные (кстати, это можно сделать и через phpMyAdmin, указав полный путь к csv файлу):
LOAD DATA LOCAL INFILE 'IP2LOCATION-LITE-DB11.CSV' INTO TABLE `ip2location_db11` FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY 'rn' IGNORE 0 LINES;
Определяем локацию пользователя по его IP
В примере ниже, я переименовал таблицу «ip2location_db11» в «ip2location_v4». Листинг кода ниже:
$ip_user = '195.208.131.1'; /* Россия, Новосибирск */ $ip_user = '5.101.112.0'; /* Эстония */ $sql = 'SELECT * FROM `ip2location_v4` WHERE "'.ip2long($ip_user).'" BETWEEN `ip_from` AND `ip_to` LIMIT 1'; $Result = mysqli_query($DB, $sql); $Data = mysqli_fetch_assoc($Result); echo "<pre dir='ltr'>";print_r($Data); echo "</pre>";
Где:
ip2long() - ф-я конвертирующая строку, содержащую IPv4-адрес в целое число.
Примеры IP были найдены в интернете. В коде выше, отсутствует подключение к БД, поэтому не стоит бездумно копировать и проверять работу.