Опросец

Добавляете ли Вы свой блог в рейтинги?

View Results

Loading ... Loading ...

Реклама на сайте

Баннеры

Участник Blograte.ru Участник планеты Developers.org.ua
Форум блоггеров
Каталог "Тематических Блогов Рунета"

Определение местоположения пользователя по его IP

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

Сайт представлял из себя каталог 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() );

Немного рекламы - простой и ненавязчивой:
ПНД - Плиты перекрытия, плиты дорожные б/у, колодезные кольца.

[Post to Twitter] Не жадничай, твитни пост, поделись с друзьями 

Похожие записи

Определение местоположения пользователя по его IP
Всего Комментариев - 19

  • xaoc

    а ничего что файл с базой 25 метров почти весит?

  • js-php

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

    Может вы знаете другой способ определения широты и долготы местности по её IP? Буду очень рад узнать об альтернативных вариантах

  • xaoc

    В принципе соглашусь, что ваш метод опрадан в данной ситуации, уж очень подробная инфа нужна о посетителе. Как вариант можно поискать какой нибудь сервис(сходу не нашел под данную задачу, только определение страны и города, пример http://www.wipmania.com/ru/), но тут так же возможны проблемы, с быстродействием и прочим

  • js-php

    Ну и с данной базой есть еще небольшие проблем с точностью + Москва может быть написана для одного диапазона как Moscow, а для другого как Moskva.
    Но база постоянно обновляется и шлифуется.
    А за ссылку спасибо, будет время изучу доскональней. Скоро напишу о том как я по координатам искал близлежайшие города и салоны

  • А можно у вас купить рекламу на сайте?

    • Алекс

      Да конечно, если она не противоречит законам и моральным принципам, то любой желающий может обратиться через контактную форму Реклама на блоге

  • Подскажите к чему это все?

    • Алекс

      Ну конкретно это решение использовалось для следующего: по IP пользователя определялось откуда он пришел и отображались, например,ближайшие точки по карте, которые отметили владельцы салонов как свои заведения. Работало это все вместе с gmap, собственно координаты для этого и брались чтобы показать именно то место на земном шаре откуда пришел юзер

  • Boris

    Можно ли на JavaScript определить страну откуда пришёл посетитель и если он входить в список из 5 стран, то отправить его СРАЗУ на страницу сайта на его РОДНОМ языке
    Те кто не попадают в список отправляются на страницу “по умолчанию”
    Спасибо!

    • Алекс

      У меня была похожая задача, но там все сводилось к тому, чтобы определить язык браузера(англ. или фр. - делалось для Канады) и отображать ту или иную кнопку. Такой способ знаю, но он не совсем то, что вам нужно. Да и зачем это делать JavaScript’ом, можно отлично редиректнуть на php

  • Andrew

    Нашел 2 варианта не требующих познаний в бинарнниках :
    1.скачать программку Wandering IPs например тут http://ru-admin.net/soft/53545-wandering-ips-v129.html (наверное можно и с оф.сайта,но нужон серийник, а тут он есть) которая сама скачает себе базу данных и на 3D-глобусе рисует трассировки и краткую инфо
    2. скачать тут http://www.wipmania.com/plugins/ плагин для Mozilla, который “Он отображает информацию о физическом расположении веб-сервера страницы, на которой Вы находитесь в данный момент …”
    Поставил! Красотень!!! :)

  • Victor

    А у меня не работает((((
    Fatal error: Call to undefined function getRealIpAddr()
    Подскажите что может быть.

  • Люблю тексты в таком духе! Большое спасибо :)

  • Спасибо автору за статью! вечер поисков и вроде как я могу определять широту и долготу юзера, с базой конечно муторно, не скинете парсер для MySQL? Уж очень не хочется чтобы каждый раз данные брались из файла.

    • Алекс

      Ну тут как, парсер там простой переборщик, я не вдавался в тонкости организации этого файла, работает долго, да и с каждым обновлением файла придется “перепаршивать” базу

  • Прикольно написано, но как говорится, для общей картины нужно как минимум три источника :)

  • Аркадий

    Значит всё-таки отреагировали… Не быстро :)