Проверка IP

Тема в разделе "PHP", создана пользователем rasandrey, 21 дек 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Подскажите, плиз, как сделать:

    у меня есть форма обратной связи. Нужно проверять перед каждой отправкой IP адрес, если форма с этого ИП была отправлена менее чем 7 дней назад, то выводить сообщение "Вы уже оставили отзыв" если более 7 дней назад - то выполнить action?

    Как?
     
  2. SeoProger

    SeoProger Писатель

    Регистр.:
    29 ноя 2008
    Сообщения:
    9
    Симпатии:
    3
    Если проверка по ip, то нужно сохранять где-нибудь даты отправки формы для всех ip за последние 7 дней, например в базе. И уже там проверять. Можно сохранять cookies в браузере на 7 дней и проверять, если установлена cookie, то значит за последние 7 дней форма была отправлена. Но во втором случае посетителю будет достаточно сменить браузер или удалить нужные cookie, зато это можно будет сделать полностью на JS.
     
  3. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    я думаю, что записывать в файл было бы оно... Но не знаю как делать проверку на ИП?
     
  4. SeoProger

    SeoProger Писатель

    Регистр.:
    29 ноя 2008
    Сообщения:
    9
    Симпатии:
    3
    В большинстве случаев для того, чтобы узнать ip-адрес можно использовать переменную окружения REMOTE_ADDR:
    PHP:
    $ip $_SERVER['REMOTE_ADDR'];
    Но можно еще проверять такие переменные, как
    HTTP_X_FORWARDED_FOR, HTTP_CLIENT_IP
     
  5. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Вот сделал так... осталось 2 проблемы: считать с файла IP - проверить на совпадение(как сделать не знаю), считать дату и сравнить с настоящей!
    PHP:
    <?php
    $ip 
    $_SERVER['REMOTE_ADDR'];
    $file fopen("ip.txt""a+") or die ("Невозожно открыть файл");
    while(!
    feof($file))
    {

    $s fgets($file,10);
    if (
    $ip == $s)
    {
    echo 
    "Вы уже оставляли отзыв";
    break;
    }
    else {
    $date date("d m Y");
    fputs($file,$ip."\n");
    fputs($file,$date);
    echo 
    "Можете оставить отзыв";
        }
    }

    fclose($file);
    ?>
     
  6. SeoProger

    SeoProger Писатель

    Регистр.:
    29 ноя 2008
    Сообщения:
    9
    Симпатии:
    3
    если делать таким способом, то, наверное, лучше сохранять в каждой строке дату и ip, т.е. запись в файл будет выглядеть так:
    PHP:
    fputs($file$ip ' ' date(Y-m-d) . "\n");
    Для проверки ip нужно пройтись по всем строкам файла и разделить по пробелу ip и дату. Если найден ip, то проверяем дату. Преобразовать строку в дату можно при помощи ф-ии strtotime(). С помощью нее можно также к дате прибавить 7 дней (+ 7 days). И после этих двух операций с датой сравниваем полученную дату с текущей.
    Если планируется много отправок формы, то имеет смысл время от времени удалять старые данные по ip.
     
  7. _AlexSK_

    _AlexSK_ Постоялец

    Регистр.:
    30 окт 2008
    Сообщения:
    59
    Симпатии:
    8
    Я бы советовал вместо сохранения IP-адреса, устанавливать куку на неделю.
    Т.к. при проверке IP могут быть случаи когда один пользователь отправил форму, а все остальные пользователи из этой сетки вынуждены ждать 7 дней.
     
  8. Arnor

    Arnor Создатель

    Регистр.:
    5 фев 2009
    Сообщения:
    36
    Симпатии:
    12
    Вот функция определения IP.
    PHP:
    function getIP() { 
      if (isSet(
    $_SERVER)) { 
        if (isSet(
    $_SERVER["HTTP_X_FORWARDED_FOR"])) { 
          
    $realip $_SERVER["HTTP_X_FORWARDED_FOR"]; 
        } elseif (isSet(
    $_SERVER["HTTP_CLIENT_IP"])) { 
          
    $realip $_SERVER["HTTP_CLIENT_IP"]; 
        } else { 
          
    $realip $_SERVER["REMOTE_ADDR"]; 
        } 
      } else { 
        if ( 
    getenv"HTTP_X_FORWARDED_FOR" ) ) { 
          
    $realip getenv"HTTP_X_FORWARDED_FOR" ); 
        } elseif ( 
    getenv"HTTP_CLIENT_IP" ) ) { 
          
    $realip getenv"HTTP_CLIENT_IP" ); 
        } else { 
          
    $realip getenv"REMOTE_ADDR" ); 
        } 
      } 
      return 
    $realip
    }  
     
  9. gOsToFf

    gOsToFf Постоялец

    Регистр.:
    1 окт 2007
    Сообщения:
    81
    Симпатии:
    4
    Сейчас каждый 2 умеет удалять куки....
    Так что это бессмысленная идея...

    Я бы сделал регу на сайте. И по логину делал это дело.... А рега по уникальным майлам. Тоже канечно не спасает. Но для этого надо регить несколько акков. Тут уже можно сделать ограничение по ипу если хочется. 1 рега с одного ип в день допустим.
     
  10. swer

    swer

    Регистр.:
    15 июн 2008
    Сообщения:
    305
    Симпатии:
    38
    Нужно делать с помошью мускла а не файлов.
     
Статус темы:
Закрыта.