Поиск
Последние записи:
- Нестандартные шрифты для сайта. Использование и рецепты.
- Определение региона посетителя сайта
- Команды работы с сервером для web-разработчика
- Настройки TinyMCE в MODx
- Как выбрать хостинг для сайта?
- CSS хаки. Особенности кроссбраузерной верстки.
- Уязвимости e107
- Установка DISQUS на сайт. Внешняя система комментариев
- Новогодний подарок для разработчиков сайтов
- 301 Редирект на Ucoz и не только…
Самое популярное:
- MODx Revolution vs MODx Evolution
- Дублирование контента в MODx
- Мета-теги и заголовки MODx
- Карта сайта и google sitemap в MODx
- Как подключить lightbox
- Проблема c кодировками MODx
- Мета-теги в MODx 1.0.2
- RSS лента на MODx
- CSS хаки. Особенности кроссбраузерной верстки.
- Установка DISQUS на сайт. Внешняя система комментариев
Мета
Категории:
Полезное
Архив
День недели и дата публикации - Воскресенье, 25 сентября 2011 - 16:18 в категории javascript, PHP, unix. Вы можете читать сайт в RSS потоке.
Определение региона посетителя сайта
Категория 25 сентября 2011 in javascript, PHP, unix
драйвер от аудашки Creative всегда убивал меня своей истинной американскостью.Задача состоит в том, чтобы, опираясь на данные, передаваемые посетителем сайта, определить его региональное положение. Это может понадобиться для того, чтобы по умолчанию отразить на сайте нужную контактную информацию или альтернативный контент. Для определения региона посетителя сайта можно использовать как серверные, так и клиентские технологии.
"Выберите ваш регион". Пункты: 1.Америка 2.Все другие регионы.
bash.org.ru
Определение региона с помощью nginx
Этот способ целесообразно использовать, если сайт находится на собственном виртуальном или физическом сервере. В этом случае изменение конфигурации nginx и загрузка баз не составят большого труда. Процесс осуществляется в четыре шага: 1. Ставим базу GeoIP. Страны есть в deb-пакете. Для определения города придется скачать свой пакет.sudo apt-get install geoip-database libgeoip-dev wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoLiteCity.dat.gz sudo mkdir -v /usr/share/GeoIP sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat2. Добавляем в /etc/nginx/nginx.conf в секцию http строки:
http {
....
# GeoIP
geoip_country /usr/share/GeoIP/GeoIP.dat; # the country IP database
geoip_city /usr/share/GeoIP/GeoLiteCity.dat; # the city IP database
..
}
3. В файл /etc/nginx/fastcgi_params добавляем переменные, котоыре будут передаваться в массив $_SERVER веб-приложения:
# 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;Этот файл должен быть подключен в параметрах виртуального хоста nginx. 4. Перезапускаем сервер
sudo service nginx restart
Определение региона сайта с помощью php
Если модификация настроек nginx невозможна, или данный сервер отсутствует, определить регион посетителя можно с помощью библиотеки geoip. Если библиотека подключена, становятся доступными следующие функции:- geoip_continent_code_by_name — Получить двухбуквенный код континента
- geoip_country_code_by_name — Получить двухбуквенный код страны
- geoip_country_code3_by_name — Получить трехбуквенный код страны
- geoip_country_name_by_name — Возаращает полное название страны
- geoip_database_info — Получить версию БД GeoIP
- geoip_db_avail — Проверить доступность БД GeoIP
- geoip_db_filename — Возвращает имя файла БД GeoIP
- geoip_db_get_all_info — Возвращает всю информацию о файлах БД в виде многомерного массива
- geoip_id_by_name — Возвращает скоростную метрику интернет-канала пользователя (GEOIP_UNKNOWN_SPEED/GEOIP_DIALUP_SPEED/GEOIP_CABLEDSL_SPEED/GEOIP_CORPORATE_SPEED ).
- geoip_isp_by_name — Возвращает имя провайдера (ISP) пользователя
- geoip_org_by_name — Возвращает имя организации, за которой закреплен IP пользователя.
- geoip_record_by_name — Возвращает информацию о местоположении пользователя (континент, страна, город, широта и долгота).
- geoip_region_by_name — Возвращает код страны и региона
- geoip_region_name_by_code — Возвращает название региона страны и код региона
- geoip_time_zone_by_country_and_region — Возвращает часовой пояс клиента (по вычисленной стране и региону).
1. Закачиваем и устанавливаем базу и модуль для php.
sudo apt-get install geoip-database libgeoip-dev php5-geoip wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoLiteCity.dat.gz sudo mkdir -v /usr/share/GeoIP sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat2. Проверяем, чтобы расширение php было подключено (/etc/php5/fpm/conf.d), и перезагружаем интерпретатор.
sudo service php5-fpm restart3. Проверяем установку:
<?=geoip_record_by_name($_SERVER['REMOTE_ADDR']);?>
Определение региона сайта с помощью javascript
Этот способ подойдет, если нет возможности определения региона пользователя на уровне сервера. На мой взгляд, лучшим решением является зарегистрировать свой сайт в сервисе http://ipgeobase.ru/ и использовать возвращаемые данные на сайте. Сервис возвращает в формате xml данные о локации пользователя. Т.к. данные структурированы, с ними легко работать. Посмотреть возвращаемый результат можно, введя в браузереhttp://ipgeobase.ru:7020/geo?ip=Ваш_ip
например:
На jquery разбор будет примерно такой:
$.get("http://ipgeobase.ru:7020/geo?ip=<?=$_SERVER['REMOTE_ADDR']?>", function(data) {
var myregion = $(data).find("region").text();
//делаем что-то с данными
return true;
}, "xml")
Минусов у такого решения много:1) Не работает без javascript
2) Надо обязательно предусмотереть отсутствие кеширования, т.е. скрипт не должен кешироваться системой управления контентом
3) Т.к. работа скрипта зависит от стороннего сервиса, снижается его надежность
Если при создании сайта не была предусмотрена возможность работы с регионами, сделать соответствующую доработку совершенно не сложно.
Один ответ на “Определение региона посетителя сайта”
Оставить комментарий
Вы можете подписаться на RSS ленту комментариев.



декабря 24, 2011 at 2:02
Очень интересно. Пробую запустить проект где по геоположению.. пользователя выводиться альтернативный контент. Сайт делали ламеры на джумле. Кошмар какой-то.. Если есть возвожность проконсультировать-:-) ну или как то помочь может?!:) norman@infonet.nnov.ru василий спасибо:)