Best-club - портал хорошего настроения!
→◊ Библиотека ◊←
Меню сайта
  • Драмы
  • Ужасы
  • Фэнтези
  • Боевики
  • Мистика
  • Комедии
  • Триллеры
  • Мелодрамы
  • Фантастика
  • Мультфильмы
  • Приключения
  • Связь с админом
  • Список пользователей
  • Полная статистика сайта
  • ТОП наград
  • Переводчик
  • Конвертер величин
  • Проверка правописания
  • Раздача ICQ
  • Оставить отзыв о сайте
  • Раскрутка сайтов

  • Поиск по сайту
    Введите ключевое слово
    для поиска



    Статистика сайта




    ProfiSmart TOP webgari.com Рейтинг сайтов

    Каталог сайтов

    bodr_top
    Онлайн всего: 4
    Гостей: 4
    Пользователей: 0

    Зарегистрировано:
    Всего: 1117
    Парней: 1070
    Девушек: 47
    Последний: molodoo

    Облако тегов
    Важная информация
    Главная » Статьи » Wap/Web Мастеру » PHP, Perl, ASP

    Определение страны человека, пришедшего на сайт
    В этой статье будет рассматриваться способ определить страну пришедшего на ваш сайт пользователя. Применять это все можно для разных целей: как у меня, просто потому что приятно, для автоматического определения языка вывода (для "многоязычных" сайтов) или еще для чего-то... Из ПО нам понадобятся установленные 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 файла в базу данных применять такой код: 

    //Параметры для доступа к БД 
    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'); 
    }  
    Категория: PHP, Perl, ASP | Добавил: Admin | Дата: 12.09.2009 | Просмотры: 679 | Рейтинг:
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Вход на сайт
    Гость, добро пожаловать на best-club! Тапки в углу, пиво в холодильнике. Располагайся:) Для получения большего комфорта войди как пользователь или зарегистрируйся.



    Обмен музыкой [?]
    Открыть в новом окне

    Партнёры





    Опрос

    Сколько времени в день проводите в интернете?
    Всего ответов: 25

     
    Best-club team © 2008 - 2025

    SiteMap Партнёры и друзья Поддержать проект
    Третий Мир: Война Королей - Форум
    Администрация сайта не несёт ответственности за материалы опубликованные на сайте! Все материалы исключительно для ознакомления!
    Мини профиль