<?php
/*
if (!empty($_SERVER['HTTP_CLIENT_IP']))
    $ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
*/ 
$ip=$_SERVER['REMOTE_ADDR'];
#$bot=$_SERVER['HTTP_USER_AGENT'];
$bot_detect=false;
$lines_htaccess_repl=null;
$conf_rewrite=false;
$s_time=time();
// Загрузка настроек
if(file_exists(H."/#adm/#ipab/incsetup.dat"))
{
include_once H."/#adm/#ipab/incsetup.dat";
}else{
$ap_time_interval=10;   //  Интервал времени подсчета
$ap_count_get=10;       //  Количество запросов за интервал времени
$ap_time_autoban=86400; //  Время бана
}
//
#echo $ap_time_interval."<br />";
#echo $ap_count_get."<br />";
#echo $ap_time_autoban."<br />";
// <Перечисление ботов>
if (strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) {$bot_detect=true;}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) {$bot_detect=true;}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) {$bot_detect=true;}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Mail')) {$bot_detect=true;}
// </Перечисление ботов>

// <Проверка исключений>

if(!$bot_detect)
{
$bot_detect=mysql_fetch_array(mysql_query("SELECT * FROM `protect_exceptions` WHERE `ip`='$ip' LIMIT 1"),MYSQL_ASSOC);
}
// </ Проверка исключений>

#if($bot_detect)echo $bot_detect." детектор<br />";
if (!$bot_detect) 
{
  $newtime=($s_time-$ap_time_interval); // (1 Время подсчета )
  $ip_result=mysql_fetch_array(mysql_query("SELECT * FROM `protect_all_visits` WHERE `ip`='$ip' LIMIT 1"));
  #echo mysql_error()."<br />";
  if($ip_result)
  {
  #echo $ip_result['date']." - ".$newtime."<br />";
    if($ip_result['date']>$newtime) 
      {
        mysql_query("UPDATE `protect_all_visits` SET `count`=(`count`+1) WHERE `id`='$ip_result[id]' LIMIT 1"); #echo mysql_error()."<br />";
      }else
      {
      mysql_query("UPDATE `protect_all_visits` SET `count`='0' WHERE `id`='$ip_result[id]' LIMIT 1");
      mysql_query("DELETE FROM `protect_black_list_ip` WHERE `ban_time` < '$s_time' LIMIT 1");
      $conf_rewrite=true;
      #echo mysql_error()."<br />";
      }
  }else
  {
  mysql_query("INSERT INTO `protect_all_visits` (`ip`,`date`,`count`) VALUES ('$ip','$s_time','1')");
  #echo mysql_error()."<br />";
  }
  
 
#echo mysql_error()."<br />";
 
 
 if($ip_result)$count_visit=$ip_result['count']; else $count_visit=0;
 
 if ($count_visit>=$ap_count_get)  //Условие бана  (2 количество запросов за время подсчета)
 {
  $ban_time=($s_time+$ap_time_autoban);  // (3 время бана)
  mysql_query("INSERT INTO `protect_black_list_ip` (`ip`, `addtime`, `ban_time`, `client`) VALUES ('$ip','$s_time','$ban_time','".mysql_real_escape_string($_SERVER['HTTP_USER_AGENT'])."')");
  #echo mysql_error()."<br />";
  if(mysql_affected_rows()>0)
    {
      mysql_query("UPDATE `protect_all_visits` SET ``='0' WHERE `id`='$ip_result[id]' LIMIT 1");
      $conf_rewrite=true;
    }
 }    
}
//
if($conf_rewrite)  // перезапись конфигурации
{
// <Путь и чтение файла .htaccess>
$file_htaccess=H."/.htaccess"; // Путь по файловой системе к файлу .htaccess корневой директории сайта
$old_htaccess=file_get_contents($file_htaccess);
// </Путь и чтение файла .htaccess>
$lines_htaccess_repl='';
$lines_htaccess_repl.="<Limit GET POST> \r\n";
$lines_htaccess_repl.=" order allow,deny \r\n";

  $result=mysql_query("SELECT * FROM `protect_black_list_ip` WHERE `ban_time` > '$s_time' ORDER BY INET_ATON(ip)");
  #echo mysql_error()."<br />";
  $number=mysql_num_rows($result);

    for ($n=1; $n<=$number; $n++) 
    {
     $htaccess_ip=mysql_fetch_array($result);
     $lines_htaccess_repl.=" deny from ".$htaccess_ip['ip']."\r\n";
    }

  $lines_htaccess_repl.=" allow from all \r\n";
  $lines_htaccess_repl.="</Limit>";
  //
  $old_htaccess=preg_replace("'<Limit GET POST[^>]*?>.*?</Limit>'si","$lines_htaccess_repl",$old_htaccess);
  file_put_contents($file_htaccess, $old_htaccess);
  mysql_query("OPTIMIZE TABLE `protect_all_visits`, `protect_black_list_ip`");
#echo $old_htaccess."<br />";
}
// Освобождаем память
unset($ban_time,$bot_detect,$conf_rewrite,$count_visit,$file_htaccess,$htaccess_ip,$ip,$ip_result,$lines_htaccess_repl,$newtime,$number,$old_htaccess); //,$ap_time_interval,$ap_count_get,$ap_time_autoban
?>