Всего 3 строчки кода:
<?phprequire $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php';// подключаем пролог Bitrix
require_once($_SERVER["DOCUMENT_ROOT"] . "/ADRES_DO_CLASSA_OTNOSITELNO_KORNYA_SAITA/nikolaevevgeIpGeo.php");// подключаем класс библиотеки
var_dump(nikolaevevgeIpGeo::getInfoByIp($_SERVER["REMOTE_ADDR"]));// получаем var_dump массива в результате работы библиотеки по определению географии клиента по IP-адресу
Сам класс библиотеки доступен по ссылке
blog.ivru.net/?id=82Установка библиотеки:
- в первом листинге(по указанной выше ссылке) информация как осуществляется получение данных от удалённого сервера о географии IP адресов;
- второй листинг - SQL код для создания таблицы в базе данных битрикс, куда будет сохраняться кеш для IP адресов по которым осуществлялся запрос к удалённому серверу, чтобы не выполнять повторных удалённых соединений, а так же для снижения времени определения;
- третий листинг - это сам класс библиотеки, его код нужно сохранить например в файл nikolaevevgeIpGeo.php и подключить в первой строке кода который я привёл в своём ответе.
Описание работы класса библиотеки:
Библиотека достаточно простая. Содержит методы для преобразования IP адресов в целое число без точек и наоборот, а так же методы поиска по кешу в локальной базе данных, сохранению новых данных кеш, и метод для запроса информации с сервера где хранится база данных по адресам.
Информация о географии определённая по одному IP адресу в рамках единой PHP-сессии, не создаёт повторных обращений к кешу базы данных и удалённому серверу, за счёт сохранения информации о IP-адресе в статической переменной класса библиотеки, то есть если информация о IP есть в указанном массиве запросы к удалённому серверу или базе данных выполняться не будут. Такой подход работает даже если Вы будите использовать определение из разных модулей Bitrix.
Настройки библиотеки(не обязательно):
В классе библиотеки есть такие строчки:
// [НАЧАЛО] !! Настройки !!
static public $timeToUpdate = 1728000;// Время в секундах через которое записи о IP-адресах в базе данных считаются устаревшими(1728000 = 20 дней).
static public $tableName = "useripdata";// Имя таблицы в базе данных
// [КОНЕЦ] !! Настройки !!
В первой переменной Вы можете задать время хранения кеша с информацией о IP адресе, по умолчанию 20 дней.
В второй переменной задаётся имя таблицы в базе данных которое Вы хотите использовать для хранения кеша с гео-информацией о IP-адресе(а если точнее о стеке IP-адресов), если Вы будите использовать отличное от useripdata, то не забудте поменять название таблицы при создании в базе данных а именно в строчке CREATE TABLE IF NOT EXISTS `useripdata` (
Скрины с примерами кода и демонстрацией результата: