В продолжение темы про IP, в этой статье будут рассмотрены способы определения страны, города и другой гео-ино о пользователе по его IP.
GeoIP в виде PHP расширенияНаверное самая часто используемая библиотека для определения IP (оф. док на php.net). Оно и не мудрено, ведь бинарная БД + скомпилированное PHP расширение работают быстрее всех остальных способов.
Установка на Ubuntu Server:
Sudo apt-get install php5-geoip
После установки скачиваем последние обновления базы IP адресов:
После этих действий необходимо перезагрузить PHP. Это нужно для того что бы PHP интерпретатор подгрузил только что установленное расширение (php5-geoip) и новые базы IP адресов.
Также периодически необходимо обновлять базы IP адресов:
Sudo wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz sudo gunzip GeoIP.dat.gz sudo mv GeoIP.dat /usr/share/GeoIP/
После обновления так же необходимо перезагружать PHP для применения обновленной базы IP адресов:
Sudo service php5-fpm restart # если вы используете NGINX # или sudo service apache2 restart # если вы используете Apache
После того как GeoIP установлен, его можно использовать в коде, например так:
Теперь мы знаем, что IP записывается в REMOTE_ADDR. Откуда она берется? Все эти данные клиент пересылает во время установки соединения. Эта переменная задается в настройках сервера на стороне клиента.
Некоторые для определения города по IP в PHP используют значения HTTP-заголовков, но это в корне неверно. Любой пользователь может прописать значения заголовков для своего хоста. Также следует понимать, какой IP вам нужен. Например, значение HTTP_X_FORWARDED_FOR содержит адрес удаленного клиента, его прокси или может быть вообще пустым. Короче, тут разбираться не на один вечер хватит .
Что касается браузера пользователя, то его можно попробовать определить с помощью функции get_browser (). Но для ее применения на стороне клиента в файле php.ini должен быть прописан путь к browscap.ini. Иначе получите подобное предупреждение:
Теперь с помощью PHP определим страну по IP. Но для начала проведем обзор всех решений в этой сфере. Большая часть подобных скриптов использует упомянутый нами элемент глобального массива $_SERVER REMOTE_ADDR. Теперь начинается самое главное.
Можно использовать уже , в которых полученный IP просто сортируется в зависимости от своего значения. Надеюсь, для вас не является секретом, что это значение присваивается клиенту (хосту) в зависимости от его геолокации: страны, города и региона проживания пользователя. На анализе этих диапазонов и построен весь функционал.
Также применяются различные сторонние сервисы наподобие ip-whois.net. С помощью скрипта вы передаете значение IP, а тот возвращает вам данные о нахождении хоста.
Кроме этого часть специализированных библиотек поставляется со своей базой данной, в таблицах которых содержатся все рассортированные (по географии) диапазоны IP. Я не буду их перечислять. Таких в Сети сейчас хватает.
Решать вам. Применение стороннего сервиса позволит снизить затраты ресурсов и нагрузку на ваш сайт. При этом использование библиотеки с базой избавит от проблем с подключением.
В следующем скрипте для определения региона по IP PHP используется библиотека TabGeo. Сейчас ее официальный ресурс не работает. Я скачал библиотеку с GitHub, но использовал только файл country.php. В нем по полученному IP определяется страна проживания пользователя. И затем (по ISO-коду) можно реализовать редиректы на различные страницы сайта: