![]()
Недавно во время изучения очередной микроблог-гео-социальной-сети BrightKite, я встретил заманчивое предложение узнать моё местонахождение по моему IP-адресу. На BrightKite эта функция была реализована при помощи java-апплета, но мне, конечно же, было нужно решение на PHP.
Конечно же в этом деле главная проблема – базы. Недолго загуглив я встретил сервис GeoIP от Бостонской комапнии MaxMind. Ребята представляют базы и API для работы с ними за деньги и бесплатно. Понятно, что бесплатно мы получим базу менее детальную, но для моих нужд этого вполне достаточно.
Если вас пугает слово API, сразу замечу, что GeoIP это не веб-сервис. База представлена в бинарном виде, и набор библиотек читает этот формат. Разработчики говорят, что это для того, чтобы проводить “быстрый поиск”.
Итак, что нужно, для использования библиотеки?
- Надо скачать библиотеку и свежую версию базы (28мб). Мне хватило файлов geopipcity.inc, geoip.inc, geoipregionvars.php.
- Выполнить следующий код в вашем скрипте:
include("geoipcity.inc"); $gi = geoip_open("GeoLiteCity.dat",GEOIP_STANDARD); $res = GeoIP_record_by_addr($gi,$_SERVER['REMOTE_ADDR']); geoip_close($gi); |
Как можно заметить, код подключает библиотеку, затем подключает базу, смотрит запись по адресу клиента ($_SERVER['REMOTE_ADDR']) и закрывает указатель.
Данные выводятся в таком виде:
geoiprecord Object ( [country_code] = UA [country_code3] = UKR [country_name] = Ukraine [region] = 05 [city] = Donetsk [postal_code] = [latitude] = 48 [longitude] = 37.8 [area_code] = [dma_code] = ) |
Если кому-то интересно, код всегда можно проверить при помощи моей “Геолокаційної Вівці”: http://meelk.com.ua/geo
Кстати, для тех кому интересно: платная версия стоит $370, плюс по $90 в месяц за обновления. Бесплатная версия покрывает 99.5% территории, а платная – 99.8% на уровне стран, и 79% и 83% соответственно на уровне городов.
А базу можно взять в формате CSV (100Mb в распакованном виде) для использования в своих БД.


Спасиб, пригодилось!
Я еще его не использовал.