Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Веб-разработка? Это просто! Определение географического положения по IP-адресу


Определение географического положения по IP-адресу

Задался я недавно вопросом, как определить страну, город и координаты юзера по его IP-адресу, погуглил немного и вот хочу поделиться результатами моих научных изысканий.

Первым мне на глаза попался сайт http://ipgeobase.ru/ . Скачал я их скрипт и БД. Протестировал и обнаружил:

  1. Скрипт http://ipgeobase.ru/files/soft/search_cgi.tar.gz при поиске по базе для начала загружает всю базу в память а потом уже производит по ней поиск, что очень плохо по вполне очевидной причине большого и неразумного потребления ресурсов памяти. На моем хостинге этот скрипт вообще отваливался, так и не дорабатывая до конца загрузку базы в память.
  2. Сама база данных создана совершенно нерациональным образом, обладая неразумной избыточностью. Вы и сами можете оценить этот факт, скачав базу по адресу http://ipgeobase.ru/files/db/Main/db_files.tar.gz

Так что лучше вообще не обращать внимания на предлагаемые алгоритм и базу, а сразу перейти к более корректным методам.

Вот здесь http://www.maxmind.com/ я обнаружил действительно быстрый и эффективный алгоритм определения географического положения пользователя по его IP-адресу.

Причем, эта компания предоставляет как платные, так и бесплатные версии ПО. Платная версия стоит $370, плюс по $90 в месяц за обновления. Бесплатная версия покрывает 99.5% территории, а платная - 99.8% на уровне стран, и 79% и 83% соответственно на уровне городов. Как видим, разница в точности несущественная и для наших скромных некоммерческих целей подойдет и бесплатная версия ПО. Обновления баз для обеих версий производятся раз в месяц, поэтому надо периодически скачивать новую версию базы данных.

Использовать ПО достаточно просто.

  1. Качаем здесь саму библиотеку.
  2. Качаем здесь последнюю версию базы данных. В распакованном виде база занимает около 28 мегабайт.
  3. Заливаем на хостинг файлы GeoLiteCity.dat, geoipcity.inc, geoip.inc, geoipregionvars.php. Пусть они лежат в одной директории на сервере.
  4. В той же директории создаете файл whereami.php имеющий следующее содержимое:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>Где я?</title> </head> <body> <?php include "geoipcity.inc"; $gi = geoip_open("GeoLiteCity.dat", GEOIP_STANDARD); $res = GeoIP_record_by_addr($gi,$_SERVER['REMOTE_ADDR']); geoip_close($gi); foreach ($res as $key => $val) { print "$key = $val<br>\n"; } ?> </body> </html>

Как можно видеть, в строке 8 подключается сама библиотека, в строке 9 создается объект GeoIP, которому в качестве параметра передается имя файла, содержащего базу данных, в строке 10 происходит сам поиск по базе данных. Функции GeoIP_record_by_addr в качестве параметров передаются объект GeoIP и IP-адрес (в данном случае это адрес хоста, вызвавшего страницу, то есть адрес пользователя, открывшего в бразуере вашу страницу). В строке 11 происходит корректное освобождение ресурсов, занятых под объект GeoIP. Следующий цикл foreach выводит на экран все поля объекта, который вернула функция GeoIP_record_by_addr.

Структура результата имеет вид:

country_code = RU country_code3 = RUS country_name = Russian Federation region = 48 city = Moscow postal_code = latitude = 55.7522 longitude = 37.6156 area_code = dma_code =

Вот и все! Не боги горшки обжигают...

Прочитать и обсудить статью Определение географического положения по IP-адресу а также другие полезные статьи, посвященные веб-разработке можно в нашем блоге Веб-разработка? Это просто!


В избранное