САЙТОСТРОЙ.РУ
Построй свой сайт!

Определение страны посетителя сайта

опубликовано 02.09.2014

Многие могли быть удивлены тем, что многие сайты достоверно способны определять, из какой страны Вы заходите в интернет. Такие "умения", кроме познавательных целей, несут и вполне практические: западные платные сайты опасаются допускать к себе посетителей из России и стран СНГ. Посетители из России едва ли станут покупать платные эккаунты за десятки и сотни долларов для доступа к качественной эротике или музыке, так зачем же напрасно расходовать трафик на потенциально несостоятельного клиента?

Определение страны посетителя

В интернете существует база данных IP-адресов с делением по странам. Эта база не носит, впрочем, официального статуса. Однако она открыта для использования и пополняется регулярно. Скачать ее можно по ссылке на сайте db-ip.com. Формат базы данных - CVS, что смутит обыкновенного пользователя, но ни в коем не смутит опытного программиста, поскольку данный формат наиболее удобен для импорта в MySQL. Мы посмотрим, как импортировать данные Ip-to-Country и как мы их использовать.

Импорт информации об IP

Формат файла ip-to-country.csv, загруженного нами с указанного сайта, имеет следующий вид:

"33996344","33996351","GB","GBR","UNITED KINGDOM" 


Фрагмент базы данных Ip-to-Country

Первые 2 числа - это упакованные стартовые и конечные значения диапозона IP, описанного данной записью (строкой).

Как известно, IP-адрес 4 версии, в данный момент используемый в основном, представляет собой 4 8-битных числа, разделенных точкой. Этот вид удобен для человека, однако не совсем удобен для техники. Программное обеспечение использует 32-разрядные числа, которые и являются теми самыми IP-адресами. Чтобы преобразовать IP-адрес из числового вида в читабельный, можно использовать функцию PHP long2ip(), обратная ей функция - ip2long().

Далее следует двухбуквенное и трехбуквенное обозначение страны и ее полное название. Для России это будут "RU", "RUS" и "RUSSIAN FEDERATION" соответственно. Мы заметили, что значения полей содержатся в кавычках, а сами поля разделены запятыми. Мы получаем возможность использования функции PHP split(), однако удобнее использовать команду MySQL версии 5 и выше LOAD DATA INFILE. Этот метод достаточно быстрый и надежный. Но для начала создадим структуру таблицы данных.

Мы уже выяснили, какие поля содержатся в файле CVS, поэтому не составит труда создать под них соответствующий SQL-каркас:

CREATE TABLE `ip2country` (
  `ipFrom` int(15),
  `ipTo` int(15),
  `country2` char(2),
  `country3` char(3),
  `country_title` varchar(25)
);

Далее нам необходимо выполнить всего одну инструкцию MySQL, чтобы загрузить весь файл с данными:

$qr="LOAD DATA INFILE "/root/ip-to-country.csv" INTO TABLE ip2country
FIELDS TERMINATED BY ","
OPTIONALLY ENCLOSED BY """"
LINES TERMINATED BY " "";
mysql_query($qr);

Эту инструкцию можно выполнить и непосредственно из командной строки клиента mysql, если они Вам доступны. Для выполнения команды в скрипте от имени пользователя не root, пользователь MySQL должен обладать привилегией File_priv для работы с файлами операционной системы. Как вариант, можно загрузить данные в базу на локальном компьютере и затем перенести их на сервер.

Использование базы IP

Теперь настала пора задействовать полученные данные. Для этого напишем простенький скрипт, который будет вычислять посетителя из России и приветствовать его соответствующим образом. IP-адрес посетителя содержится в переменной $_SERVER["REMOTE_ADDR"], поэтому осуществим выборку из базы, согласно этому значению:

$country_qr=mysql_query("SELECT country2 ip2country WHERE ipFrom<=INET_ATON(".$_SERVER["REMOTE_ADDR"].") AND ipTo>=INET_ATON(".$_SERVER["REMOTE_ADDR"].")");
$country_res=mysql_fetch_array($country_qr);
mysql_close($country_qr);

if($country_res["country2"]=="RU")
{
    print "Здравствуй, русский человек!";
}

Типичное использование db-ip

Определенным недостатком является отсутствие в базе Db-ip таких данных, как город и название провайдера. Это сужает спектр применения базы. Однако и в таком виде, если настроить автоматические пополнение локальной базы, можно многого достичь: это и переключение сайта на предполагаемый язык посетителя, и отображение релевантных новостей, и ограничение на сайт из определенных стран. Пользователь оценит внимание к себе и почувствует заботу.

теги: ip

Комментарии и вопросы

Статью никто не комментировал.


Задать вопрос или оставить комментарий

Ваше имя:
Комментарий:
Код с картинки справа:=


Просим с уважением относиться к труду автора сайта и при копировании документов указывать ссылки на http://saytostroy.ru.