/*** Класс проверки и блокировки ip-адреса. */
class BotBlockIp {
/*** Время блокировки в секундах. */
const blockSeconds = 60;
/**
* Интервал времени запросов страниц.
*/
const intervalSeconds = 1;
/**
* Количество запросов страницы в интервал времени.
*/
const intervalTimes = 4;
/**
* Флаг подключения всегда активных пользователей.
*/
const isAlwaysActive = true;
/**
* Флаг подключения всегда заблокированных пользователей.
*/
const isAlwaysBlock = true;
/**
* Путь к директории кэширования активных пользователей.
*/
const pathActive = 'active';
/**
* Путь к директории кэширования заблокированных пользователей.
*/
const pathBlock = 'block';
/**
* Флаг абсолютных путей к директориям.
*/
const pathIsAbsolute = false;
/**
* Список всегда активных пользователей.
*/
public static $alwaysActive = array(
);
/**
* Список всегда заблокированных пользователей.
*/
public static $alwaysBlock = array(
);
/**
* Метод проверки ip-адреса на активность и блокировку.
*/
public static function checkIp() {
// Если это поисковый бот, то выходим ничего не делая
if(self::is_bot()){
return;
}
// Получение ip-адреса
$ip_address = self::_getIp();
// Пропускаем всегда активных пользователей
if (in_array($ip_address, self::$alwaysActive) && self::isAlwaysActive) {
return;
}
// Блокируем всегда заблокированных пользователей
if (in_array($ip_address, self::$alwaysBlock) && self::isAlwaysBlock) {
header('HTTP/1.0 403 Forbidden');
echo '';
echo '';
echo '
';
echo 'К сожалению, Вы временно заблокированы, из-за частого запроса страниц сайта. ';
echo 'Вам придется подождать. Через ' . $time_block . ' секунд(ы) Вы будете автоматически разблокированы.';
echo '
';
echo '';
echo '';
exit;
}
// Создание идентификатора активного ip-адреса
if (!$is_active) {
touch($path_active . $ip_address . '_' . time());
}
}
/**
* Метод получения текущего ip-адреса из переменных сервера.
*/
private static function _getIp() {
// ip-адрес по умолчанию
$ip_address = '127.0.0.1';
// Массив возможных ip-адресов
$addrs = array();
// Сбор данных возможных ip-адресов
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// Проверяется массив ip-клиента установленных прозрачными прокси-серверами
foreach (array_reverse(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])) as $value) {
$value = trim($value);
// Собирается ip-клиента
if (preg_match('#^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$#', $value)) {
$addrs[] = $value;
}
}
}
// Собирается ip-клиента
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$addrs[] = $_SERVER['HTTP_CLIENT_IP'];
}
// Собирается ip-клиента
if (isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) {
$addrs[] = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
}
// Собирается ip-клиента
if (isset($_SERVER['HTTP_PROXY_USER'])) {
$addrs[] = $_SERVER['HTTP_PROXY_USER'];
}
// Собирается ip-клиента
if (isset($_SERVER['REMOTE_ADDR'])) {
$addrs[] = $_SERVER['REMOTE_ADDR'];
}
// Фильтрация возможных ip-адресов, для выявление нужного
foreach ($addrs as $value) {
// Выбирается ip-клиента
if (preg_match('#^(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3})$#', $value, $matches)) {
$value = $matches[1] . '.' . $matches[2] . '.' . $matches[3] . '.' . $matches[4];
if ('...' != $value) {
$ip_address = $value;
break;
}
}
}
// Возврат полученного ip-адреса
return $ip_address;
}
/**
* Метод проверки на поискового бота.
*/
private static function is_bot()
{
if (!empty($_SERVER['HTTP_USER_AGENT'])) {
$options = array(
'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot','YandexDirectDyn',
'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser',
'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster',
'YandexPagechecker', 'YandexImageResizer','YandexAdNet', 'YandexDirect',
'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika',
'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus',
'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot',
'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI',
'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google',
'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves',
'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!',
'Ezooms', '', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus',
'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks',
'proximic', 'OpenindexSpider','statdom.ru', 'Exabot', 'Spider', 'SeznamBot',
'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti',
'DomainVader', 'DCPbot', 'PaperLiBot'
);
foreach($options as $row) {
if (stripos($_SERVER['HTTP_USER_AGENT'], $row) !== false) {
return true;
}
}
}
return false;
}
}
// Проверка текущего ip-адреса
BotBlockIp::checkIp();
Pirk Cardiline - slėgį stabilizuojantis produktas Elaktrėnuose už mažesnę kainą su 50% nuolaida. Kaina: 39€
Elaktrenai
Išskleidžiamajame sąraše pasirinkite savo miestą, kad nurodytumėte pristatymo būdus ir laiką.