В качестве вступления давайте поговорим о том, что же такое GeoIP. GeoIP — это библиотека, которая позволяет определить географическое местоположение пользователя по IP адресу. Данную библиотеку можно использовать для своих проектов, перед этим так же следует установить расширение PHP, после чего мы получаем набор дополнительных функций для работы с данным модулем. Рассмотрим пример, как установить эту библиотеку на свой сервер под управлением Linux CentOS.
Первым делом, добавляем репозиторий EPHEL, для этого в консоли сервера вводим команду:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5Server/x86_64/epel-release-5-3.noarch.rpm
Затем устанавливаем библиотеку GeoIP посредством yum:
yum install geoip geoip-devel
После того, как библиотека была установлена, нам предстоит скачать файл с базой адресов, и разместить в нужном месте:
cd /tmp wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gunzip ./GeoIP.dat.gz rm /usr/share/GeoIP/GeoIP.dat mv ./GeoIP.dat /usr/share/GeoIP/GeoIP.dat
После выполнения этих манипуляций, нам так же потребуется установить расширение PHP. Php-geoip является модулем, который позволит использовать функции библиотеки в PHP.
echo "extension=geoip.so" >>/etc/php.ini pecl install geoip
В ходе выполнения команды может возникнуть ошибка: «pecl.php.net is using a unsupported protocal — This should never happen.install failed» исправляется это дело так:
cd 'pecl config-get php_dir' mv .channels .channels-broken pecl update-channels
Повторно вводим команду:
pecl install geoip
Перезапускаем Apache:
service httpd restart
Проверяем установку библиотеки GeoIP:
php -m | grep geoip geoip
Так же работу GeoIP можно проверить в PHP, для этого достаточно в скрипте обратиться к функции:
geoip_country_name_by_name($_SERVER['REMOTE_ADDR']);
А если все равно не работает?
У меня еще nginx стоит, так я и в его конфиги прописал все что надо.
geoip_country /usr/share/GeoIP/GeoIP.dat; # the country IP database
geoip_city /usr/share/GeoIP/GeoLiteCity.dat; # the city IP database
и в fastcgi_params
# For GeoIP
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;
Но не работает.