Создание привлекательной формы. Определение страны

Создание привлекательной формы. Определение страны

От автора: В этом уроке мы с вами решим задачу по автоматическому определению страны пользователя, на основании его IP-адреса.

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

скачать исходникискачать урок

Для решения поставленной задачи нам потребуется база диапазонов IP-адресов, которые присвоены той или иной стране. Я воспользуюсь базой стран, которые предоставляет сервис maxmind.com. По данной ссылке можно скачать базу стран. Это будет файл CSV. В дополнительных материалах вы также найдете уже готовую базу в архиве, который достаточно импортировать на сервер.

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

По этой ссылке вы сможете прочесть о полученной базе и о работе с ней.

Итак, давайте начнем с алгоритма. В представленной базе уже имеется список стран. Соответственно, нам не нужен теперь в скрипте статичный массив стран, теперь этот массив мы можем получать динамически – из БД.

Далее нам нужно будет определить IP пользователя. В БД имеется 2 поля (start_ip и end_ip), в которых находятся граничные значения диапазона IP-адресов страны. Однако, IP-адрес – это строка. Мы легко можем сравнить одну строку с другой, но никак не получится узнать, находится ли какая-то строка в диапазоне двух других строк. Это логично, поскольку даже само определение «диапазон строк» выглядит не совсем определенно.

Именно поэтому в базе имеются еще 2 поля (start_ip_num и end_ip_num), в которых содержатся числовые представления соответствующих граничных IP-адресов диапазона. Дело в том, что любой IP-адрес можно привести к его числовому представлению. Сделать это можно средствами PHP – функция ip2long() или средствами SQL – функция INET_ATON().

После получения числового представления IP-адреса пользователя, нам достаточно выполнить SQL-запрос, который найден диапазон значений, соответствующий определенной стране. Таким образом, наш несложный скрипт будет выглядеть так (добавляем его после открытия сессии):

Осталось внести небольшую правку в цикл вывода стран:

Вот, собственно, и все. На этом наш урок завершен. До новых встреч!

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

Получить

Метки: , ,

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (10)

  1. дмитрий

    подскажите где взять базу городов россии для подобного решения

    • Андрей Кудлай

      В сети нужно искать) я не встречал и не задавался целью найти. Вот здесь — phpinfo.su/articles/additionally/baza_stran_i_gorodov_mira.html — можно взять базу стран и городов мира, ну а из нее уже можно простым запросом взять только города нужной страны.

  2. Абай

    Здраствуйте!Я живу в Казахстане, мне нужны только база городов Казахстана.

    • Андрей Кудлай

      Здравствуйте. В комментарии выше я давал ссылку на базу стран и городов мира, ну а из нее уже можно простым запросом взять только города нужной страны. Также можете поискать в сети, возможно есть база городов Казахстана.

  3. Юрий

    Дравствуйте, все отлично работает, есть пару нюансов,
    Используя полностью ваш скрипт со своим IP страну определяет,
    Используя последнюю базу( из сайта который в описании этой статьи) вписывая свой IP ничего не определяет, как такое может быть? притом что в новой базе
    больше чем на 30 тыс записей

    • Андрей Кудлай

      Здравствуйте. Ответ напрашивается сам собой — последняя база и база из исходников чем-то отличаются.

      • Юрий

        это я уже понял, встречный вопрос, как их объеденить что бы не дублировать записи?

        • Андрей Кудлай

          Понятия не имею, поскольку с новой БД не работал. Но подозреваю, что объединение — это плохая идея и лишняя работа. Просто сравните структуру прежней БД и новой и внесите правки в скрипт на основе структуры новой БД. Кстати, а чем не подходит БД из исходников?

          • Юрий

            я проверил новую бд и там есть диапазон моего IP но все равно не выводит, почему так может? все идентично только БД новая

          • Андрей Кудлай

            Если бы все было идентично, то и работало бы идентично, согласны? Создайте тему на нашем форуме, выложите новую БД, как будет время — я попробую посмотреть.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Я не робот.

Spam Protection by WP-SpamFree