Не самая удачная реализация но всеже) PHP: <? $limit_time = 5; //за какое время сделано $click входов чтобы банить (в секундах) $ban_time = 20; //на сколько банить $click = 3; //сколько входов разрешено сделать за $limit_time $time = strftime("%M:%S", time()); //определяем время list ($minut,$sekund) = explode(":",$time); //переводим к нужной форме $ip_navhode = $REMOTE_ADDR; //определяем айпи адресс session_name("testses"); session_start(); session_register("i"); //храним количество входов session_register("m"); //храним значение минуты session_register("s"); //храним значение секунды //session_register("p"); //храним вспомогательное значение if ($m==''){$m=$minut;} //если минута не была определена то определяем if ($s==''){$s=$sekund;} //если секунда не была определена то определяем if ($i==0) { $s=$sekund; $m=$minut; } if ($i < $click) //если сделанно входов по проверке меньше максимума то считаем их { $p=$i; $i=@$i+1; echo "ok!"; } else //если сделанно входов по проверке больше максимума { if ($s<$sekund) {$raznost = ($sekund-$s);} else {$raznost = ($s-$sekund);} echo $raznost; $s=$sekund; $m=$minut; if ($raznost<$limit_time) { echo '<META HTTP-EQUIV = "Refresh" CONTENT = "0; URL = ban.php">'; $i=0;} else { if ($p<2){ echo "GO"; $i=0; $p=@$p+1; } else { echo "GO"; $i=2; } } } ?>
скрипт работает на файлах 1. ChFile.txt 2. BFile.txt вот сам код PHP: <?php $ChFile = "ChFile.txt"; $BFile = "BFile.txt"; class XBan { function ChTime($ip) { global $ChFile; $handle = fopen($ChFile, "a"); fwrite($handle, $ip."#".time()."\r\n"); fclose($handle); $handle = fopen($ChFile, "r"); $Chdet = 0; while(!feof($handle)) { $line = fgets($handle, 1024); $ChA = explode("#", $line); if($ChA[0] == "$ip") { if($ChA[1] > time() - 5) { $Chdet++; if($Chdet == 3) { $this->r = true; $this->Ban($ip, time()); break; } } } } fclose($handle); return $this->r; } function Ban($ip, $time) { global $BFile; $handle = fopen($BFile, "r"); while(!feof($handle)) { $line = fgets($handle, 1024); if(preg_match("/$ip/", $line) !== 1) { if(strlen($line) > 0) { $lines[] = $line; } } } fclose($handle); $handle = fopen($BFile, "w"); for($i = 0; $i < count($lines); $i++) { fwrite($handle, $lines[$i]."\r\n"); } fwrite($handle, $ip."*".$time."\r\n"); fclose($handle); } function ChDet($ip) { global $BFile; if($handle = fopen($BFile, "r")) { while(!feof($handle)) { $line = fgets($handle, 1024); $BA = explode("*", $line); if(preg_match("/$ip/", $line) !== 0) { if($BA[1] > time() - 1200) { $this->r = true; break; } } } } return $this->r; } } $RobotX = new XBan; $RobotX->UserIP = $_SERVER['REMOTE_ADDR']; $RobotX->r = false; if($RobotX->ChDet($RobotX->UserIP) == true) { echo("<h1>Forbidden</h1>"); } else { if($RobotX->ChTime($RobotX->UserIP) == true) { echo("Stop!"); } else { echo("Ok!"); } } ?>