
60\15 = 4 сообщ. мин.
60*4 = 240 сообщ. в час.
240*4 = 960 сообщ. от 1 логина за 4 часа
960*30 = 28800 сообщ. за ночь

Вот такие цифИрки. Решил оградиться от этого и ночью написал небольшой мод для ограничения числа новых топиков и постов за 24 часа пользователем.
Что это даст? Если ограничить за 24 часа скажем 50 сообщений и 5 новых тем (на моем форуме редко 1 человек создает чаще 2-3 тем в день) то при флуде с 30 аккаунтов получим примерно:
50*30 = 1500 сообщений, что значительно меньше *-) Естественно стоит учесть время флуда - там еще около 300 сообщ (если флудить 4 часа). Возможно изобрел велосипед

Собственно теперь вопрос - гляньте, сильно будет он тормозить\глюкать форум? я в пхп не шарю, я больше по с++ но думаю они похожи

Собственно код мода:
Код: Выделить всё
##########################################################################
## MOD Title: Topics\posts Limit
## MOD Author: Codeblight (codeblight@mail.ru)
## MOD Description: Adds Topics\posts per day limits for registred user
## MOD Version: 1.0.0
##
## Installation Level: Easy
## Installation Time: 5 Minutes
##
##
## Files To Edit: 5
## posting.php
## admin/admin_board.php
## templates/subSilver/admin/board_config_body.tpl
## language/lang_english/lang_main.php
## language/lang_english/lang_admin.php
##
## Included Files: none
##
## License: http://opensource.org/licenses/gpl-license.php GNU General Public License v2
##
##########################################################################
##########################################################################
## Installation/Author Notes:
## First always backup the files that you're going to edit.
##
## This mod adds a new column to your 'users' table. If you are not happy
## making changes to your SQL database this mod is not for you!
##
## Tested on phpBB 2.0.19 with subSilver and my own template
##########################################################################
##########################################################################
## MOD History:
##
## 28.03.2006 - Version 1.0.0 First Release
##########################################################################
##########################################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##########################################################################
##########################################################################
#
#-----[ SQL ]--------------------------------------------------------------------------------
#
INSERT INTO phpbb_config (config_name, config_value) VALUES ('posts_per_day_limit', '50');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_day_limit', '10');
#
#-----[ OPEN ]-------------------------------------------------------------------------------
#
language/lang_english/lang_admin.php
#
#-----[ FIND ]-------------------------------------------------------------------------------
#
$lang['Flood_Interval'] = 'Flood Interval';
$lang['Flood_Interval_explain'] = 'Number of seconds a user must wait between posts';
#
#-----[ AFTER, ADD ]-------------------------------------------------------------------------
#
$lang['MaxPostsPerDay'] = 'Maximum posts per day';
$lang['MaxPostsPerDayComment'] = 'Maximum posts per day limit for one user (0 - unlimited). This feature don\'t work with guest users.';
$lang['MaxTopicsPerDay'] = 'Maximum new topics per day';
$lang['MaxTopicsPerDayComment'] = 'Maximum new topics per day limit for one user (0 - unlimited). This feature don\'t work with guest users.';
#
#-----[ OPEN ]-------------------------------------------------------------------------------
#
language/lang_english/lang_main.php
#
#-----[ FIND ]-------------------------------------------------------------------------------
#
?>
#
#-----[ BEFORE, ADD ]-------------------------------------------------------------------------
#
$lang['PostsPerDayExceeded'] = 'Your daily limit of %d messages was exceeded, please try again later.';
$lang['TopicsPerDayExceeded'] = 'Your daily limit of %d new topics was exceeded, please try again later.';
#
#-----[ OPEN ]-------------------------------------------------------------------------------
#
language/lang_russian/lang_admin.php
#
#-----[ FIND ]-------------------------------------------------------------------------------
#
$lang['Flood_Interval'] = 'Задержка «флуда»';
$lang['Flood_Interval_explain'] = 'Время (в секундах), которое должно пройти между двумя сообщениями пользователя.';
#
#-----[ AFTER, ADD ]-------------------------------------------------------------------------
#
$lang['MaxPostsPerDay'] = 'Максимум сообщений в день';
$lang['MaxPostsPerDayComment'] = 'Ограничение на число сообщений в день на одного пользователя (0 - не ограничено). Эта опция не работает с гостями.';
$lang['MaxTopicsPerDay'] = 'Максимум новых тем в день';
$lang['MaxTopicsPerDayComment'] = 'Ограничение на число новых тем в день на одного пользователя (0 - не ограничено). Эта опция не работает с гостями.';
#
#-----[ OPEN ]--------------------------------------------------------------------------------
#
language/lang_russian/lang_main.php
#
#-----[ FIND ]--------------------------------------------------------------------------------
#
?>
#
#-----[ BEFORE, ADD ]--------------------------------------------------------------------------
#
$lang['PostsPerDayExceeded'] = 'Ваш лимит из %d сообщений в день был исчерпан, пожалуйста попробуйте позже.';
$lang['TopicsPerDayExceeded'] = 'Ваш лимит из %d новых тем в день был исчерпан, пожалуйста попробуйте позже.';
#
#-----[ OPEN ]---------------------------------------------------------------------------------
#
admin/admin_board.php
#
#-----[ FIND ]---------------------------------------------------------------------------------
#
"L_FLOOD_INTERVAL" => $lang['Flood_Interval'],
"L_FLOOD_INTERVAL_EXPLAIN" => $lang['Flood_Interval_explain'],
#
#-----[ AFTER, ADD ]---------------------------------------------------------------------------
#
"L_MAX_POSTS_PER_DAY" => $lang['MaxPostsPerDay'],
"L_MAX_POSTS_PER_DAY_COMMENT" => $lang['MaxPostsPerDayComment'],
"L_MAX_TOPICS_PER_DAY" => $lang['MaxTopicsPerDay'],
"L_MAX_TOPICS_PER_DAY_COMMENT" => $lang['MaxTopicsPerDayComment'],
#
#-----[ FIND ]---------------------------------------------------------------------------------
#
"FLOOD_INTERVAL" => $new['flood_interval'],
#
#-----[ AFTER, ADD ]---------------------------------------------------------------------------
#
"POST_PER_DAY_LIMIT" => $new['posts_per_day_limit'],
"TOPIC_PER_DAY_LIMIT" => $new['topics_per_day_limit'],
#
#-----[ OPEN ]---------------------------------------------------------------------------------
#
templates/subSilver/admin/board_config_body.tpl
#
#-----[ FIND ]---------------------------------------------------------------------------------
#
<tr>
<td class="row1">{L_FLOOD_INTERVAL} <br /><span class="gensmall">{L_FLOOD_INTERVAL_EXPLAIN}</span></td>
<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="flood_interval" value="{FLOOD_INTERVAL}" /></td>
</tr>
#
#-----[ AFTER, ADD ]---------------------------------------------------------------------------
#
<tr>
<td class="row1">{L_MAX_POSTS_PER_DAY} <br /><span class="gensmall">{L_MAX_POSTS_PER_DAY_COMMENT}</span></td>
<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="posts_per_day_limit" value="{POST_PER_DAY_LIMIT}" /></td>
</tr>
<tr>
<td class="row1">{L_MAX_TOPICS_PER_DAY} <br /><span class="gensmall">{L_MAX_TOPICS_PER_DAY_COMMENT}</span></td>
<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="topics_per_day_limit" value="{TOPIC_PER_DAY_LIMIT}" /></td>
</tr>
#
#-----[ OPEN ]----------------------------------------------------------------------------------
#
posting.php
#
#-----[ FIND ]----------------------------------------------------------------------------------
#
if ( $mode == 'editpost' || $mode == 'delete' || $mode == 'poll_delete' )
#
#-----[ BEFORE, ADD ]---------------------------------------------------------------------------
#
if (!$userdata['session_admin'])
{
$poster_id = $userdata['user_id'];
$current_time = time();
switch ( $mode )
{
case 'reply':
// проверка на число новых постов
$sql = "SELECT " . $current_time . " - post_time FROM " . POSTS_TABLE . " WHERE poster_id = " . $poster_id . " AND " . $current_time . " - post_time < 86400";
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql);
}
if ($db->sql_numfields($result))
{
$rowcount = $db->sql_numrows($result);
if ($rowcount > 0)
{
$posts_lim = intval($board_config['posts_per_day_limit']);
if ($posts_lim > 0)
{
if ($posts_lim <= $rowcount)
{
message_die(GENERAL_MESSAGE, sprintf($lang['PostsPerDayExceeded'], $board_config['posts_per_day_limit']));
}
}
}
}
$db->sql_freeresult($result);
break;
case 'newtopic':
// проверка на число топиков
$sql = "SELECT " . $current_time . " - topic_time FROM " . TOPICS_TABLE . " WHERE topic_poster = " . $poster_id . " AND " . $current_time . " - topic_time < 86400";
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql);
}
if ($db->sql_numfields($result))
{
$rowcount = $db->sql_numrows($result);
if ($rowcount > 0)
{
$topics_lim = intval($board_config['topics_per_day_limit']);
if ($topics_lim > 0)
{
if ($topics_lim <= $rowcount)
{
message_die(GENERAL_MESSAGE, sprintf($lang['TopicsPerDayExceeded'], $board_config['topics_per_day_limit']));
}
}
}
}
$db->sql_freeresult($result);
break;
}
}
#
#-----[ SAVE/CLOSE ALL FILES ]-----------------------------------------------------------------------
#
# EoM