Логин: Пароль: Забыли пароль? Регистрация
Рекламный блок

              

Страница 1 из 11
Форум » FOR WEB-MASTER`S » Учебник » Определение страны человека пришедшего на сайт
Определение страны человека пришедшего на сайт
cookДата: Пятница, 11.02.2011, 11:58 | Сообщение # 1

Уникальный Человек
Репутация: 1004
Сообщений: 1056
Награды: 3
Статус:
В этой статье будет рассматриваться способ определить страну пришедшего на ваш сайт пользователя. Применять это все можно для разных целей: как у меня, просто потому что приятно, для автоматического определения языка вывода (для "многоязычных" сайтов) или еще для чего-то... Из ПО нам понадобятся установленные PHP и PostgreSQL (можно все легко переделать и под MySQL). Так же нам необходима база соответствий IP-адресов конкретным странам, ее можно взять с этого сайта (http://inattack.ru/download/art/ip-to-country.csv.zip). Для тех, кто скачал SQL файл, я описывать процесс занесения в базу не буду - думаю и так все понятно, для остальных же приведу как пример один из вариантов, хотя конечно существует великое множество решений задачи о перегонке данных в формате CSV в базу данных. Для начала необходимо создать таблицу в базе данных, назовем ее countries:

CREATE TABLE countries (

short character varying(2),

nshort character varying(3),

country_name character varying(50),

start_ip bigint,

stop_ip bigint

);

Итак для превращения CSV файла в базу данных применять такой код:

<?php

//Параметры для доступа к БД

define ("DB_USER", "dbuser");

define ("DB_PASSWORD", "dbpasswd");

define ("DB_DB", "mydb");

$conn_str=sprintf("dbname=%s user=%s password=%s", DB_DB, DB_USER, DB_PASSWORD);

$conn=pg_connect($conn_str);

//Путь к CSV файлу

$csv="/usr/home/iptc/ip-to-country.csv";

$countrys=file($csv);

while (list(,$value)=each($countrys)) {

//Разборка строки для занесения в базу

if (preg_match('/"([0-9]+)","([0-9]+)", "(\w+)","(\w+)","(.+)"/',$value,$match)) {

// Формируем и отправляем запрос к БД

pg_query ($conn, "INSERT INTO countries (start_ip, stop_ip, short, nshort, country_name) values (".$match[1].",".$match[2].",'".$match[3]."','".$match[4]."','".$match[5]."')");

}

}

echo ("OK!");

?>

Тут следует отметить, что на не очень быстрых серверах возможно вылетание скрипта по таймауту (см. параметр max_execution_time в php.ini). На последнем этапе подготовки - создадим индекс для более быстрого поиска: CREATE INDEX ips ON countries USING btree (start_ip, stop_ip); Определять из какой страны пришел пользователь мы будем по переменной $_SERVER["REMOTE_ADDR"] которая в большинстве случаев содержит IP адрес прокси-сервера, хотя бывают конечно варианты... В моём случае выводим приветствие с указанием строки и подставляю картинку соответствующего флага, кому это не нужно легко смогут подчистить.

<?php

// Запрос к базе данных

$result=pg_query($conn, sprintf("SELECT short, country_name FROM countries WHERE start_ip<'%u' AND
stop_ip>'%u'",ip2long($_SERVER["REMOTE_ADDR"]), ip2long($_SERVER["REMOTE_ADDR"])));

// Разбираем результат

if (pg_num_rows($result)==1) {

$row = pg_fetch_object($result,0);

printf("<center>You are from:<br /><img src=\"./images/flags/%s.gif\"><br /><strong>%s</strong></center><hr />",strtolower($row->short),ucwords(strtolower($row->absolute)));

}

else {

print('Нет данных для этого IP');

}

 
Форум » FOR WEB-MASTER`S » Учебник » Определение страны человека пришедшего на сайт
Страница 1 из 11
Поиск:


Статистика форума Zorend.ru
Последние темы Популярные темы Лучшие пользователи Новые пользователи Звезды ZOREND`a
Глобальное обновление
Пара Анекдотов
Правила раздела
Считаем до 1000
Какая видео карта сейчас нормальная?
WebThumb 2.0 - Обмен посетителями на ваш сайт
халявные Icq налетай!
Аву плиз
 Считаем до 1000
 Конкурс "Уникальный человек"
 Участники конкурса "Уникальный человек"
 Играем в города :)
 Ваш аппарат
 Жалобы на участников конкурса "Уникальный человек"
 Зимняя шапка.
 Смайлики
Timoha - (Сообщений: 1091)
cook - (Сообщений: 1056)
pikus - (Сообщений: 1012)
Adrianoosem - (Сообщений: 419)
n1ceman - (Сообщений: 319)
b0ot - (Сообщений: 313)
sg-ua - (Сообщений: 250)
Аватар - (Сообщений: 250)
Alisasslom - (Зарегистрирован: 20.07.2015)
donkj4 - (Зарегистрирован: 20.07.2015)
meroslEr - (Зарегистрирован: 20.07.2015)
MelvinRat - (Зарегистрирован: 20.07.2015)
randiew16 - (Зарегистрирован: 20.07.2015)
ArthurGers - (Зарегистрирован: 20.07.2015)
CharlesCida - (Зарегистрирован: 20.07.2015)
guydd11 - (Зарегистрирован: 20.07.2015)
friendgog - (Репутация: 1187)
cook - (Репутация: 1004)
b0ot - (Репутация: 500)
pikus - (Репутация: 201)
Вадим - (Репутация: 102)
Timoha - (Репутация: 7)
-Wicked - (Репутация: 5)
plan - (Репутация: 5)