Сегодня была такая задача – определить, из какого города юзер, который задает вопросы на сайте. Статистика и счетчики нам, в этом деле, особо не помогли, поэтому решили опираться на IP-адрес. Опять же встает вопрос – как реализовать, ведь ясно, что для этого нужна база, в которой соотносятся города и ip-адреса. Поискав в интернете нашел блог mitasych.com, в котором человек реализовал данную задачу, да еще и сделал вывод местоположения юзера на google-карте. А база данных взята с сайта www.maxmind.com, на котором ребята собственно и зарабатывают тем, что создают и постоянно обновляют данную базу. Имеются платная и бесплатная базы городов. Бесплатная отличается только незначительно меньшей зоной покрытия и, вроде как, должна быть ссылка на них. Я, естественно, остановился на бесплатной. Все скрипты и саму базу можно скачать у них с сайта. Однако, как оказалось, имеется на пути пара граблей. Во-первых их сервер постоянно обрубал закачку. Может быть, это было связано с большой нагрузкой, не знаю. Во вторых, когда я все-таки базу скачал и потестил, она мой ip определила как город в моск. области, а я то нахожусь в Москве. Посмотрел в блоге и на еще одном сайте определения города по ip-адресу, там все было в порядке. В итоге стинул базу с блога. Но она староватая, а следующее обновление, как написано на сайте www.maxmind.com, запланировано на апрель 2011, так что если будете у себя сие чудо устанавливать – обязательно все протестируйте.
Сама установка ничего сложного из себя не представляет, база хранятся в файле
GeoLiteCity.dat Для доступа к ней нужны еще файлы (На всякий пожарный выкладываю файлы у себя)
geoip.inc geoipcity.inc geoipregionvars.php отсюда . А чтобы google карта отображалась на вашем сайте - нужно получить код по ссылке: http://code.google.com/apis/maps/signup.html И вставить его в наш код, где 'key='. Функция GeoIP_record_by_addr возвращает массив данных по ip(город, широта,долгота и т.п).
Сам код выглядит следующим образом:
А вот работа скрипта в действии:
geoiprecord Object
(
[country_code] => US
[country_code3] => USA
[country_name] => United States
[region] =>
[city] =>
[postal_code] =>
[latitude] => 38
[longitude] => -97
[area_code] => 0
[dma_code] => 0
[metro_code] => 0
[continent_code] => NA
)
Запись опубликована в рубрике
Программирование. Добавьте в закладки
постоянную ссылку.