САЙТОСТРОЙ.РУ

Разработка сайта любой сложности собственными силами - такова задача создателей сайта. Представлены лучшие советы вебмастеров, образцовые технические задания, бесценный опыт веб-мастеринга и советы в области безопасности сайтов, новые технологии веб, инструменты продвижения сайтов. Теперь создание сайтов не будет для Вас загадкой!

Построй свой сайт!

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


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

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

В интернете существует база данных IP-адресов с делением по странам. Эта база не носит, впрочем, официального статуса. Однако она открыта для использования и пополняется регулярно. Скачать ее можно по ссылке на сайте http://ip-to-country.webhosting.info/. Формат базы данных - 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 "Здравствуй, русский человек!";
}

Типичное использование Ip-to-Country

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


САЙТОСТРОЙ.РУ - практикум создания сайтов для каждого

Просим с уважением относиться к авторам сайта и при копировании документов указывать ссылки на наш сайт.