![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| pavel_p |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.7.2007 Репутация: нет Всего: нет |
хочу реализовать более тормозной ответ с сайта при частом обращении, только вот одна трабла, если нет решения, то можно пойти в обход накладные расходы не должны быть большими
есть ли у PHP способ организовать (гипер-) глобальной области переменных, которые были б доступны из разных запросов (похоже на сеансы только более глобальная вещь - я конечно подозреваю, что можно это сделать при помощи файлика или таблички в ДБ - но хочеться более элегантное решение) - затем мы при помощи этой фичи накапливаем данные о запросах в течении минуты от IP-адресов и если какое-нибуть создание пытается запрашивать страницы с большой скоростью - то его сразу штрафовать секундами ожидания. к примеру сделал в минуту 10 запросов к динамическому коненту - наказываешься 10 секундами штрафа. так называемая защита от прожорливых ботов. ps. я посмотрел документацию - скорее всего э то суперглобальная переменная $_ENV |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
даже если бы запись в этот массив гарантировала сохранение данных между вызовами различных скриптов, то все равно - держать в памяти список из ip + количества запросов + дате последнего обращения(потенциально - 4294967296 * (4 + 2 + 8) - 56 Мб) и лопатить этот массив вручную - дело-то как раз не-"элегантное". это решение достаточно элегантно. можешь не беспокоиться. |
|||
|
||||
| pavel_p |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.7.2007 Репутация: нет Всего: нет |
нет достаточно сохранять только те что светяться в течении минуты.. т.е. обычные пользователи которые по нескольку минут просматривают одну страницу быстро будут вываливаться из этой замечательной таблицей да БД это кстати элегантное решение - мне кажется я замучусь реализовывать на массивах такая таблица: create table query_tail ( ip_address char(16), ts timestamp, index(ip_address), index(ts) --- надеюсь это ускорит операцию удаления устаревших сведений надо залезть в мануал ) а при каждом вызове делаем такие запросы delete from query_trail where (где кароче ts старше одной минуты... ща сложно думать) select count(*) from query_tail where ip_address={$_SERVER['REMOTE_ADDR']} а потом по результатам последнего запроса: sleep($value); |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |