Определение географии посетителя на сайте по IP-адресу. Geo-библиотека для Joomla, Bitrix и WordPress.
В этой статье расскажу Вам про geo-библиотеку для сайтов. Для чего она может потребоваться разработчику: часто решаемыми задачами этого типа являются например следующие: вывод контактного номера телефона организации в том городе из которого посетитель пришёл на сайт или для ускорения заполнения формы заказа в Интернет-магазине, благодаря использованию geo-библиотеки поля региона и города пользователя могут быть заполнены автоматически. Ещё поскольку для пользователей России geo-библиотека может пригодиться поскольку страна находится в нескольких часовых поясах для того чтобы выдавать время каких либо событий сайта(например оставленного каким либо посетителем сообщения в гостевой книге) с учётом часового пояса.
Для решения указанных выше задач в случаи если Ваш сайт работает на безе CMS Bitrix, WordPress или Joomla можно использовать библиотеку написанную на языке PHP которая называется nikolaevevgeGeoIP(обратите внимание на момент написания этой статьи CMS работала только с указанными CMS, хотя автор сообщает что есть планы внести необходимые корректировки, чтобы её можно было использовать и с другими CMS или без CMS вовсе). Возможно выбирая решение для поставленной задачи Вы уже успели прочитать про эту или другие библиотеки, например sypexGeo или API от netgeoplugin и у Вас мог возникнуть вопрос, почему же для решения задачи определения географии посетителя сайта по IP выбрана именно geo-библиотека nikolaevevgeGeoIp. Ниже будут приведены несколько пунктов про эту библиотеку, которые Вам могут понравиться.
Как выше написано библиотека одинаково подходит для 3-х CMS(Bitrix, WordPress, Joomla) и для любой CRM используется одинаково, не требуя каких либо настроек(если конечно Вы только не решите всё-же что то настроить). Вам потребуется лишь разместить на хостинге Вашего сайта один файл библиотеки, который затем подключить через require или include, после чего Вам становится доступным необходимый функционал.
Не требует обновления базы данных. У библиотеки nikolaevevgegeoIP собственное API через него Ваш сайта будет автоматически получать актуальную geo-информацию о стеках IP адресов посетителей Вашего сайта или иных IP-адресов информацию о которых Вы запросите. То есть, ни размещение базы данных с адресами, ни дальнейшее обновление этой базы не потребуется — эти функции уже предусмотрены и автоматизированы.
Информация о ранее запрошенных стеках IP-адресов берётся из кеша который хранится в Вашей базе данных, а если адрес запрашивается повторно в рамках одной PHP-сессии — из специальной переменной библиотеки, в результате получение geo-данных происходит быстрее, а так же снижается вероятность замедления загрузки сайта если вдруг API-сервис будет не доступен.
Для хранения кеша библиотека nikolaevevgeGeoIP использует таблицу в базе данных MySQL которая будет создана автоматически при первом использовании, при этом Вам не придётся указывать настройки для соединения с базой данных — библиотека сама определит CMS которую Вы используете и возьмёт необходимые для соединения с базой настройки из соответствующего конфигурационного файла. Вам так же не придётся инициализировать загрузку файлов CMS — библиотека и это сделает самостоятельно, а если Вы используете библиотеку в участке кода перед выполнением которого уже загружены файлы CMS, то библиотека проверит это и повторного подключения не нужных файлов не произойдёт, таким образом перед использованием Вы можете подключить файлы CMS самостоятельно, а можете этого не делать — в любом случаи в результате использования библиотеки nikolaevevgeGeoIP ошибки от этого не произойдёт.
Предоставляет информацию о IP адресе в объёме не меньшем чем у других аналогичных бесплатных библиотек, и даже некоторые функции которые у других библиотек платные или отсутствуют, примером такой функции является определение часового пояса по IP-адресу.
Библиотека полностью бесплатная(по крайней мере на момент написания статьи это было так и по информации от автора планов делать библиотеку платной или какие либо её функции пока нет), а так же не имеет лимитов на количество запросов, в отличии например от используемой в CMS Битрикс по умолчанию библиотеки, которая после определённого количества запросов за расчётный период перестаёт работать.
Таким образом у библиотеки nikolaevevgeGeoIP есть плюсы и как минимум на её стоит обратить внимание а возможно и применить для решения поставленной задачи. Для того чтобы продемонстрировать как PHP программист может использовать библиотеку на практике приведу пример реализации ранее описанной задачи, когда на сайте требуется в зависимости от региона посетителя выводить разные номера телефонов компании в разделе контактов. Предположим что требуется выводить номер телефона +7 800 000 00 01 для посетителей из города Санкт-Петербург и Ленинградской области, для всех остальных посетителей — номер телефона +7 800 000 00 02.
Файл библиотеки Вы можете подключить как в участке кода непосредственно отвечающем за отображение страницы, либо в каком либо файле который загружается для всех страниц сайта(не буду приводить конкретный пример, поскольку места подключения для разных CMS могут отличаться), в любом случаи подключить библиотеку можно вызвав require_once(«nikolaevevgegeoip.php»); перед именем файла возможно Вам потребуется указать директорию в котором размещён файл библиотеки. Кроме того Вам потребуется код файла библиотеки, его предлагаю взять с официальной страницы библиотеки по ссылке http://blog.ivru.net/?id=82.
Для того чтобы получить массив с гео-информацией, из которого для решения поставленной в этой статье задаче потребуется информация о коде региона, необходимо вызвать следующий метод класса библиотеки: nikolaevevgeGeoIp::get($_SERVER[«REMOTE_ADDR»]); в котором параметр передавать не обязательно, пример с $_SERVER[«REMOTE_ADDR»] был приведён лишь с целью показать, что можно получать информацию не только о текущем IP адресе пользователя, а любом произвольном, таким образом следующий код вернёт тот де результат что и предыдущий: nikolaevevgeGeoIp::get(); либо же Вы можете передать первым параметром строку содержащую IP-адрес, для которого требуется получить geo-данные. Если говорить о коде региона, то он доступен в полученном от вызова методе массиве в элементе с ключом regioncode.
Таким образом для вывода нужного номера телефона в зависимости от региона пользователя можно воспользоваться следующим кодом:
require_once("nikolaevevgegeoip.php");//подключение файал библиотеки
if (in_array(nikolaevevgeGeoIp::get($_SERVER["REMOTE_ADDR"]),array("RU_SPB","RU-LEN"))) {//Проверяем посетитель ли это города Санкт-Петербург или Ленинградской области
echo "+7 800 000 00 01";//Вывод номер телефона для посетителей из указанных выше городов и регионов
} else {
echo "+7 800 000 00 02";//вывод номера телефона для посетителе из прочих городов и регионов
}