Цитата мудреца

Голосование

Система Orphus. Если вы заметили ошибку на сайте, нажмите сюда.
Загружается, подождите...
Начало сайта Материалы сайта Программы PHP-скрипты
Версия для слабовидящих
Версия для печати

Ограничение на скорость выдачи страниц одному пользователю

Здесь представлены некоторые мои разработки на PHP. Это в, основном, служебные скрипты, которые работают в составе других скриптов и не могут быть протестированы здесь непосредственно.

Надо бы выяснить, почему не работает...
Вы последнюю версию пробовали? Она здесь. В ней много нового появилось...

В общем, у этого варианта есть плюс в том, что качалкам тяжело его обойти. Но знаете, если у меня, например, на сайте 6000 страниц. И если качалка запустится, то ей придётся работать не меньше 5 часов. Есть ли настройка временных интервалов у качалок? Будет ли человек ждать столько?
Вообще-то, этот скрипт делался не столько чтобы защитить контент от скачивания, сколько чтобы оградить сервер от повышенных нагрузок. Ведь эти качалки безжалостны...
Минусов у этого скрипта 2: во-первых, как Вы и сказали, он не анализирует поисковиков. А мой сайт, например, Апорт убрал из каталога, потому что его робот несколько раз получал отказ. А всё потому, что Апорт маскировался под обычного юзера (в юзер-агенте).
Во-вторых, совершенно странная "параллельная загрузка". Ведь в момент, пока скрипт обрабатывает одного пользователя, другой, совершенно легально может захотеть зайти на сайт. И его нельзя блокировать. У меня были проблемы (в первой версии) именно потому, что данные писались в файл, который блокировался.
Ответить


не знаю. у меня на хостинге (европа) не идет этот скрипт. при перезагрузке страницы показывает сразу ошибку 503 и больше ничего кроме нее не отображает...
Ответить


Такое может случаться, если у вас сразу идёт какой-то редирект или вызов сразу нескольких страниц через http с сайта. Т.е. получается, что при открытии вашей страницы скрипт, в котором стоит вызов этого модуля, загружается не один раз.
Этого можно избежать разными способами:
Либо включить вызов модуля только в некоторые скрипты, не во все, в зависимости от того, как у вас организована загрузка страницы.
Либо, если идёт редирект, осуществлять его специальной процедурой. У меня это сделано следующим образом:
Процедура, производящая редирект.
Код: Выделить всё
function Redirect($target){
   $f_name   = $_SERVER['DOCUMENT_ROOT'] . '/temp/r' . $_SERVER['REMOTE_ADDR'];
   $f      = fopen($f_name, 'w');
   fclose($f);
   header('Location: ' . $target);
   exit;
}

В какой-то определённой папке создаётся пустой файл, начинающийся с буквы r и содержащий ip-адрес посетителя. После этого происходит редирект.

В самом же модуле делаются такие изменения:
Вместо
Код: Выделить всё
if (!$ad_IsRobot)

Вставляется
Код: Выделить всё
/*
 *--------------------------------------------------------
 * Следующая проверка определяет, производится ли редирект
 * для данного ip-адреса
 *--------------------------------------------------------
 */
$ad_IsRedir      = false;
$ad_TicketFname = $_SERVER['DOCUMENT_ROOT'] . '/temp/r' . $_SERVER['REMOTE_ADDR'];
if (file_exists($ad_TicketFname))
{
   $ad_IsRedir = true;
   unlink($ad_TicketFname);
}

if (!$ad_IsRobot && !$ad_IsRedir)


Если будут вопросы - пишите.
Ответить


Yakushev, спасибо за отличный скрипт! Очень помог снизить нагрузку на сервер!

Небольшое дополнение к нему - базы ip поисковиков. Чтобы подстраховать себя на случай смены ip бота того или иного поисковика, я добавил в базу скрипта все ip, принадлежащие той или иной поисковой системе.

Наиболее полная база IP, принадлежащих Яндексу, можно найти здесь
Базы IP зарубежных поисковиков - здесь
Ответить


Скрипт как раз-таки застрахован от смены адреса бота (посмотрите внимательно), т.к. там указаны не адреса ботов, а маски подсети тех или иных поисковиков. Кстати, вся информация, на которую Вы ссылаетесь уже внесена в скрипт.
Кроме того, если вдруг поисковик сменит подсеть целиком, то и это не окажется страшным. На почтовый ящик приходят письма о забаненных адресах. Я всегда проверяю, кого забанил скрипт. И если это какой-то поисковик, известный или нет, я всегда могу изменить параметры скрипта под него.
Ответить


Да, я вижу, что там указаны подсети. Я просто добавил для себя еще несколько подсетей на всякий случай ;)

Не было ли проблем у посетителей при большой посещаемости сайта? Ведь теоретически может случиться так, что несколько человек с одного IP будут одновременно на сайте.
Ответить


Таких проблем не было.
Во-первых, это теоретическая ситуация, которая действительно маловероятна. Во-вторых, в этом случае выдаётся лишь временная ошибка. Человек, видя её, думает, что сайт перегружен и не будет на него переться. Проблема появляется у тех, кто ставит палец на клавишу F5 и держит её. Такие были, присылали письмо, я объяснял ситуацию и открывал доступ.
Ответить


добрый вечер
вот еще нашел адреса гугла. или это уже устарело?
Google Inc. EC12-1-GOOGLE (NET-64-68-80-0-1) 64.68.80.0 - 64.68.87.255
Google Inc. GOOGLE-2 (NET-66-102-0-0-1) 66.102.0.0 - 66.102.15.255
Google Inc. GOOGLE (NET-64-233-160-0-1) 64.233.160.0 - 64.233.175.255
Google Inc. GOOGLE (NET-216-239-32-0-1) 216.239.32.0 - 216.239.63.255
Google Inc. MFN-T324-216-200-251-112-29 (NET-216-200-251-112-1) 216.200.251.112 - 216.200.251.119
webmasterworld.com/forum39/1502.htm
Ответить


valeric писал(а):вот еще нашел адреса гугла. или это уже устарело?
Google Inc. EC12-1-GOOGLE (NET-64-68-80-0-1) 64.68.80.0 - 64.68.87.255
Google Inc. GOOGLE-2 (NET-66-102-0-0-1) 66.102.0.0 - 66.102.15.255
Google Inc. GOOGLE (NET-64-233-160-0-1) 64.233.160.0 - 64.233.175.255
Google Inc. GOOGLE (NET-216-239-32-0-1) 216.239.32.0 - 216.239.63.255

Спасибо. Добавлю эти маски.
valeric писал(а):Google Inc. MFN-T324-216-200-251-112-29 (NET-216-200-251-112-1) 216.200.251.112 - 216.200.251.119

А это, вроде, не гугловская сетка...
Последний раз редактировалось А..Я Пт 30 янв 2009 10:25, всего редактировалось 1 раз.
Ответить


Yakushev писал(а):А это, вроде, не гугловская сетка...

Точно, не его. Судя по данным из whois
Ответить


Пред.След.

Вернуться в PHP-скрипты



Кто сейчас на сайте

Зарегистрированные пользователи: нет зарегистрированных пользователей