Xpoint
   [напомнить пароль]

Интервал на добавление комментариев

Метки: [без меток]
[удл]
2006-11-22 22:30:30 [обр] Andrej[досье]
Помогите пожалуйста доделать скрипт.
   my $ip=$ENV{'REMOTE_ADDR'};
      my $i=1;
      my $tim=time();
      open (FILE,"+<baned.ini") or die "Can't open ban file\n$!";
            my @lines=<FILE>;
            
         foreach (@lines) {
                  my @temp=split(/\=/,$_);
                  if ($ip eq $temp[1] and $tim < $temp[0]+60*1) {
                        $i++;
                  }
            }
            if ($i==1){
                  push @lines,"$ip=$tim\n";
            } else {
                  print "Location:$ENV{'HTTP_REFERER'}\n\n";
                  exit;
            }
            seek FILE,0,0;
            truncate FILE,0;
            print FILE @lines;
      close(FILE);
спустя 14 часов [обр] Максим Головкин(9/18)[досье]

а что надо сделать, и что не получается?
Я вижу, что надо делать лог IP Address = Время доступа.
Мне кажется, что

else {
                  print "Location:$ENV{'HTTP_REFERER'}\n\n";
                  exit;
     }

надо убрать, а после close(FILE) уже вставить:

print "Location:$ENV{'HTTP_REFERER'}\n\n";
exit;
спустя 4 часа 6 минут [обр] Andrej[досье]
Максим, идея такая. Когда добавляется комментарий создается файлик baned.ini в нем пишется IP и время. Если же посетитель захочет еще добавить один комментарий в течение 1 минуты - у него нечего не получится. Т.к. скрипт прежде чем добавлять комментарий будет грузить baned.ini и проверять время.
Этот скрипт нашел в гугле, я пытался его переделать но как Вы видите нечего толкового не получилось. Скрипт не хочет работать так как я описываю.
спустя 19 часов [обр] Максим Головкин(9/18)[досье]
По-хорошему, надо ставить cookie пользователю, чем банить по IP, т.к. многие сидят за NAT, и получится, что вы ограничиваете не одного пользователя, а всю подсеть. Это и реализовать проще, и быстрее работать будет.
спустя 43 минуты [обр] Алексей В. Иванов(100/2861)[досье]
Cookie? Так делать не надо — пустая трата времени. Для спамара, кто бы им не был, человек или робот — это не помеха. Про NAT — другого решения быть не может, на это стоит забить.
спустя 3 часа 26 минут [обр] Максим Головкин(9/18)[досье]

Если цель отсечь спамеров, то, конечно, cookie не помогут. А если хочется просто снизить нагрузку на сервер, то почему бы и нет?

Andrej[досье]
А в чём выражается не работоспособность скрипта? На самом деле, тот код, что вы запостили, должен вполне работать.

спустя 1 час 24 минуты [обр] Алексей Севрюков(198/1280)[досье]

Поменяйте Ваше условие:

if ($ip eq $temp[0] and $tim < $temp[1]+60*1)

Ведь в $temp[0] хранится $ip, а $temp[1] - время. У Вас же почему то наоборот. Наверно поэтому и не работает, все остальное после беглого пробега выглядит работоспособным.

P.S. Вам придется еще писать утилиту и для очистки старых IP, иначе файл будет сильно разростаться.

спустя 15 минут [обр] Алексей Севрюков(198/1280)[досье]

Еще ошибку (правда не уверен что это совсем ошибка). Заключается она в том, что даже если IP уже есть в листе, и время уже прошло - он запишется как новый IP, а не заменит старую запись, что опять же приведет к раздуванию журнала, сделайте так:

my $ip=$ENV{'REMOTE_ADDR'};
my $i=0;
my $tim=time();
open (FILE,"+<","baned.ini") or die "Can't open ban file\n$!";
my @lines=<FILE>;
            
foreach (@lines) 
 {
   my @t=split(/\=/,$_);
   if ($ip eq $t[0]) 
    {
      $i=1;
      if($tim < $t[1]+60){print "Location: $ENV{'HTTP_REFERER'}\n\n";}
      else {$_="$ip=$tim\n";}
      last;
    }
 }

unless($i)
 {
   push(@lines,"$ip=$tim\n");
 }
          
seek (FILE,0,0);
truncate (FILE,0);
print FILE @lines;
close(FILE);

p.s. Не проверял.

спустя 4 дня [обр] Andrej[досье]
Разобрался, спасибо Вам.
Powered by POEM™ Engine Copyright © 2002-2005