Редирект по странам

Тема в разделе "PHP", создана пользователем vave, 14 авг 2011.

Модераторы: latteo
  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    364
    Симпатии:
    14
    Подскажите пожалуйста, как сделать редирект по странам, с htaccess не получается, можеи реально организовать на php?

    Нужно сделать что бы пользователи с России переходили на отдельную страницу.
     
  2. jami

    jami Постоялец

    Регистр.:
    10 авг 2011
    Сообщения:
    114
    Симпатии:
    39
    Готовое решение - любая TDS, например simple tds, можно оттуда выдрать код, редиректящий в зависимости от страны.
    Если гибкость тдс не нужна - гугли по php geoip, в манах операторов geoip_* есть примеры.
     
  3. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    364
    Симпатии:
    14
    смотрел я в гугле про геоип, но там столько всего расписано что мало чего понятно, есть ли готовый скрипт?
     
  4. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    Можно примерно так...
    PHP:

    function whois($ip) {
      if (
    $ip!="") {
        
    $sock fsockopen ("whois.ripe.net",43,$errno,$errstr);
        if (
    $sock) {
           
    fputs ($sock$ip."\r\n");
          while (!
    feof($sock)) {
            
    $str.=trim(fgets ($sock,128)." <br>");
          }
        }
        else {
              
    $str.="$errno($errstr)";
          return;
        }
        
    fclose ($sock);
      }
      return 
    $str;
      } 

    $i getenv('REMOTE_ADDR'); 
    $qp =  whois($i);
    $need "country:";
    $pos strpos($qp,$need);
    $search substr($qp,$pos,18);
    $excount explode(":"$search);
    $c trim($excount[1]);

    if(
    strtoupper($c) == "RU")
    {
    //для России
    }
    else
    {
    //Для остальных стран
    }

     
  5. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    364
    Симпатии:
    14
    что-то не работает..:confused:
     
  6. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    Возможно у вас отключена функция fsockopen.
     
  7. TrastMan

    TrastMan Постоялец

    Регистр.:
    13 ноя 2007
    Сообщения:
    117
    Симпатии:
    4
    Может лучше по языку, или тебе обязательно с геоип?
    По языку все просто:
    PHP:
    <?php
       
    if($_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'ru') {
        
    header('Location: http://www.yandex.ru'); }
    else { 
        
    header('Location: http://www.google.com');}
    ?>
     
  8. jami

    jami Постоялец

    Регистр.:
    10 авг 2011
    Сообщения:
    114
    Симпатии:
    39
    Дергать каждый раз ripe.net по 80 порту - не лучшее решение, http-запрос может повиснуть, к тому же далеко не у всех ип/доменов есть поле Country в whois. Решение определения по языку браузера аналогично будет некорректным в N>10 процентах случаев (юзер из албании юзает английский фаерфокс).
    Код:
    <?php
    $i = getenv('REMOTE_ADDR'); 
    $country = geoip_country_code_by_name($i);
    if ($country === 'RU') {
        echo 'This host is located in Russia: ' . $country;
    } else {
    //  not in russia
    }
    ?>
    Geoip для корректной работы требует регулярных апдейтов базы, к тому же в паблик базах много диапазонов пропущено - процент для .ru оценить сложно, но определенно лучше юзать платные базы geoip.
     
  9. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Используй geoip, базы ищи платные, так как они более полные и более актуальные.

    По geoip проверяешь, если не так то давай пользователю возможность самостоятельно выбрать правильную дислокации. Это нормальная практика и она используется в большинстве случаев.