При разработке одного проекта необходимо было определять откуда к нам пришел пользователь, точнее из какой страны, города и географические координаты: широта и долгота, а кроме того почтовый индекс.
Сайт представлял из себя каталог SPA -салонов, в котором владельцы отмечали на карте их расположение, а пользователь, зайдя на сайт, видел на карте ближайшие салоны.
Для работы нам потребуется GeoIP. Скачиваем бинарный файл с данными и вот эту вот php’ешную API. Распаковываем архив в проект, в отдельную папку, например geo
Для начала была реализована функция определения IP-адреса, ибо $_SERVER[‘REMOTE _ ADDR’] не всегда предоставляет действительную информацию.
Далее создадим страничку на которой и разместим наш функционал. Допустим, это будет geo-ip-example.php. Код странички следующий:
include("geo/geoipcity.inc"); $gi = geoip_open("geo/GeoLiteCity.dat",GEOIP_STANDARD); $record = geoip_record_by_addr($gi,getRealIpAddr() ); if( is_null($record) ) { print 'Неудалось определить'; } geoip_close($gi);
Например, для IP 206.130.100.140 (США) информация содержащаяся в массиве будет следующей:
array( 'country_code' => 'US', 'country_code3' => 'USA', 'country_name' => 'United States', 'region' => 'UT', 'city' => 'Providence', 'postal_code' => '84332', 'latitude' => 41.6929, 'longitude' => -111.8147, 'area_code' => 435, 'dma_code' => 770, )
Это одна из функций, но она предоставляет самую полную информацию.
Есть функции предоставляющие какую-то определенную информацию, например, определение кода страны по IP-адресу:
geoip_country_code_by_addr($gi,getRealIpAddr() );
Определение названия страны по IP-адресу:
geoip_country_name_by_addr($gi,getRealIpAddr() );
а ничего что файл с базой 25 метров почти весит?
Ну что тут можно сказать, весит то да, да и не уверен я что поиск по нему сильно не нагружает сервер, но это как способ решения, у меня есть еще парсер, который перегоняет все эти данный из данного бинарника в базу данных, тогда и получаешь такую штуку как все города мира разбитые по странам и регионам.
Может вы знаете другой способ определения широты и долготы местности по её IP? Буду очень рад узнать об альтернативных вариантах
В принципе соглашусь, что ваш метод опрадан в данной ситуации, уж очень подробная инфа нужна о посетителе. Как вариант можно поискать какой нибудь сервис(сходу не нашел под данную задачу, только определение страны и города, пример wipmania.com/ru/), но тут так же возможны проблемы, с быстродействием и прочим
Ну и с данной базой есть еще небольшие проблем с точностью + Москва может быть написана для одного диапазона как Moscow, а для другого как Moskva.
Но база постоянно обновляется и шлифуется.
А за ссылку спасибо, будет время изучу доскональней. Скоро напишу о том как я по координатам искал близлежайшие города и салоны
А можно у вас купить рекламу на сайте?
Да конечно, если она не противоречит законам и моральным принципам, то любой желающий может обратиться через контактную форму Реклама на блоге
Подскажите к чему это все?
Ну конкретно это решение использовалось для следующего: по IP пользователя определялось откуда он пришел и отображались, например,ближайшие точки по карте, которые отметили владельцы салонов как свои заведения. Работало это все вместе с gmap, собственно координаты для этого и брались чтобы показать именно то место на земном шаре откуда пришел юзер
Можно ли на JavaScript определить страну откуда пришёл посетитель и если он входить в список из 5 стран, то отправить его СРАЗУ на страницу сайта на его РОДНОМ языке
Те кто не попадают в список отправляются на страницу «по умолчанию»
Спасибо!
У меня была похожая задача, но там все сводилось к тому, чтобы определить язык браузера(англ. или фр. — делалось для Канады) и отображать ту или иную кнопку. Такой способ знаю, но он не совсем то, что вам нужно. Да и зачем это делать JavaScript’ом, можно отлично редиректнуть на php
Нашел 2 варианта не требующих познаний в бинарнниках :
1.скачать программку Wandering IPs например тут ru-admin.net/soft/53545-wandering-ips-v129.html (наверное можно и с оф.сайта,но нужон серийник, а тут он есть) которая сама скачает себе базу данных и на 3D-глобусе рисует трассировки и краткую инфо
2. скачать тут wipmania.com/plugins плагин для Mozilla, который «Он отображает информацию о физическом расположении веб-сервера страницы, на которой Вы находитесь в данный момент …»
Поставил! Красотень!!! 🙂
А у меня не работает((((
Fatal error: Call to undefined function getRealIpAddr()
Подскажите что может быть.
Просто Вы должны вставить еще и эту функцию. Я писал о ней когда рассказывал как узнать IP адрес
Люблю тексты в таком духе! Большое спасибо 🙂
Спасибо автору за статью! вечер поисков и вроде как я могу определять широту и долготу юзера, с базой конечно муторно, не скинете парсер для MySQL? Уж очень не хочется чтобы каждый раз данные брались из файла.
Ну тут как, парсер там простой переборщик, я не вдавался в тонкости организации этого файла, работает долго, да и с каждым обновлением файла придется «перепаршивать» базу
Прикольно написано, но как говорится, для общей картины нужно как минимум три источника 🙂
Значит всё-таки отреагировали… Не быстро 🙂
Отреагировали на что, простите?