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

Голосование

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

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

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

Vit писал(а):define ('AD_DIRNAME', $_SERVER['DOCUMENT_ROOT'] . 'http://webftp.z8.ru/index.php/tmp_path');

Не нужно сюда писать адрес в интернете. Нужно записать путь от корня сайта к папке, где будут лежать временные файлы.
У меня это выглядит так:
Код: Выделить всё
define ('AD_DIRNAME', $_SERVER['DOCUMENT_ROOT'] . '/tmp/antiddos');


Vit писал(а)://Выполняем запрос к логам. Нужно указать путь и имя лог-файла
exec('cat / home/vit08/www/site1/ samhain.z8.ru /logs/access_log | egrep \'(' .
Или вставлять нужно вот так: exec('cat / home/net2ftp/samhain.z8.ru/logs/access_log | egrep \'(' .

Вы написали как будто два совершенно разных сайта.
В первом случае нужно написать:
Код: Выделить всё
   exec('cat /home/vit08/logs/access_log | egrep \'(' . str_replace('.', '\\.', $_SERVER['REMOTE_ADDR']) . ')|(' . str_replace('.', '\\.', $host) . ')\' | sort -k 4 >' . AD_DIRNAME . '/dump.txt');

А во втором случае:
Код: Выделить всё
   exec('cat /home/net2ftp/logs/access_log | egrep \'(' . str_replace('.', '\\.', $_SERVER['REMOTE_ADDR']) . ')|(' . str_replace('.', '\\.', $host) . ')\' | sort -k 4 >' . AD_DIRNAME . '/dump.txt');


Vit писал(а):А в остальном я так понимаю ничего не надо добавлять, просто затем активировать модуль в панели админки и задавать (направлять действия скрипта) там где необходимо?

Ничего в панели админки активировать не надо. Потому что этот модуль не прописывается в вашем движке. Его надо вставлять руками в скрипт. Поэтому админка о его существовании ничего знать не будет.
Ответить


Добрый день Андрей! По моему мнению сделал так как полагается всё. Прошу всё же подредактировать если я неправильно сделал. Все пути прописал, и вроде всё понял. И как я понимаю, анализируя лог файлы определил где и что часто вызывается. Судя по тому что было написано smirna index.php есть и в самих шаблонах и в корне сайта. Сначала не мог понять в модулях и компонентах нет индекс, но затем вновь прочёл и решил, что можно ставить в различные скрипты компонентов php ? Вопрос первый: а могу я к примеру если у меня скажем разные шаблоны по категориям взять и поставить Ваш модуль, (поскольку на каждом разделе различные скрипты работают)?- Просто вставить в верхней части в index.php шаблона перед body и всё? Тогда скажем раздел в меню Новости будет защищён Вашим модулем?
Вопрос второй: я include 'antiddos.php'; вставлял в одном случае в index.php одного из шаблонов, а во втором случае в компонентный файл php. Изменений не произошло. Я вновь что-то делаю не так?
С уважением Виталий
PS. Если я вновь написал что-то из области чайников, если не трудно пошагово чуток напишите куда надо заходить и в какую строку вставлять, на примере обыкновенном если не трудно. Движок Joomla! 1.0.15
Ответить


Vit, сразу маленькая поправка. Вы всё время говорите о шаблонах. Шаблоны отвечают за внешний вид сайта. Лучше этого не касаться вообще. Модуль нужно вставлять не в шаблоны, а в php-скрипты. Лучше в какой-нибудь такой, который вызывается всеми скриптами, вызываемыми пользователями.
Например, есть index.php, есть viewforum.php, есть viewtopic.php (я беру для примера phpBB). Все они вызывают один общий модуль - functions_display.php. Вот в него и есть смысл вставить вызов antiddos.php.
Если же Вы всё же хотите привязать его к шаблонам, то Вам нужен шаблон, который отвечает за общий дизайн и загружается самым первым. В случае phpBB, это overall_header.html. И надо вызывать его в самом начале. НО! Шаблоны обрабатываются достаточно поздно. Поэтому Ваши скрипты будут уже в большей части отрабатываться, прежде чем модуль их остановит. Поэтому шаблоны - худший из возможных вариантов.

По поводу Жумлы ничего не могу сказать - не знаю её совсем.
Ответить


СПАСИБО АНДРЕЙ!

Андрей день добрый! Спасибо наконец-то я теперь всё в полном объёме уяснил! Просто вероятно я не мог понять из-за того, что не совсем пока ещё дружу с программированием, и потому в своей Джумле не знал куда приткнуться. Всё установил в корень index.php, и всё же позволю себе некоторую наглость попросить Вас о заключительном моменте, о котором написал Вам на почту.
С уважением Виталий
Ответить


SMF 1.1

Добрый день!
Поставил на Joomla 1.5 - прописал скрипт в начале шаблона - все вроде работает: по крайней мере при повторном нажатии на страницу ее вывод блокируется - гуд.
Настал черед SMF - добавил, работает, но: форум по умолчанию после ответа возвращается в тему, а скрипт это сделать ему и не дает - Ошибка 503 (Service Unavailable), посему логичнее сделать блокировку после 2 посыла запроса - на третьем, ну и на странице поставить скриптик на Java отсчитывающий время и автоматом обновляющий страницу. А?
В случае работы скрипта на Joomla + SMF папка tmp_path общая или каждому своя?
Ответить


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

У меня это сделано так.
В модуле редиректа:
Код: Выделить всё
   $f_name   = $_SERVER['DOCUMENT_ROOT'] . $TmpPath . '/r' . $_SERVER['REMOTE_ADDR'];
   $f = fopen($f_name, 'w');
   fclose($f);

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

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

if (!$ad_IsRobot && !$ad_IsRedir)
{
   /*** Чтение каталога и удаление старых файлов ***/


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


Перегруз сервака

Получил уведомление от хостера:
Информация о превышении: 19.09.2010 22:00 - 22:59 - 37.58% (5%)
Мой лимит - 5%.

Сразу полез в логи:
Код: Выделить всё
109.188.109.89 - - [19/Sep/2010:22:45:59 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:00 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:00 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:01 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:02 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:03 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:03 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:04 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:05 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:05 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:06 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:07 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
109.188.109.89 - - [19/Sep/2010:22:46:08 +0400] "GET /runduk/view.download/ HTTP/1.0" 303 298 "http://www.site.ru/travel/photo-reportage/show.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"

Сплошняком этот IP 109.188.109.89 - но ведь ему должна отдаваться - Ошибка 503 (Service Unavailable), по крайней мере на меня все срабатывает. Откуда тогда перегруз???
Ответить


Valery, трудно угадать, что там у Вас происходит.
Но вот я вижу, что на запросы выдаётся код 303. Это значит, что есть какая-то переадресация. При чём общий объём выдаваемой информации всего 298 байт. Это немного.
Почему выдаётся 303, а не 503, я не знаю. Посмотрите, что у Вас находится в папке /runduk/view.download/, что там за индексный файл, есть ли в нём обработка защиты от перегруза.
Ответить


такой папки нет, при наборе этого адреса 5сек затишье и ... - белый экран.
По идее думаю - должно редиректить или отдавать 404, а этого не происходит.
Ответить


То, что такой папки нет, говорит о том, что скрипт уж точно не срабатывает. Нужно разобраться, что же всё-таки происходит в эти 5 секунд. Скорей всего в это время как раз-таки сервер и напрягается лишними действиями. Посмотрите, есть ли у Вас обработчик ошибки 404.
Ответить


Пред.След.

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



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

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

Новостной сайт khustinfo.com - читай актуальные новости города Хуст в удобном формате.