olsufr

Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Извиняюсь, что заставил ждать. Значит так. То что я говорю относится к подписке на обновления в теме. Для начала, как гость открываете любую тему форума и нажимаете на ссылку Подписаться на извещения об обновлениях в теме. Если бы все работало корректно, то вы получите сообщение об ошибке с текстом Вы шутите??? Гости не могут подписаться на извещения о новых сообщениях в теме. Если вы не увидели этого сообщения, а прочитали, что Вы подписаны на извещения о новых сообщениях в тему, то читайте дальше. В результате этого действия, если ранее никто из зарегистрированных пользователей не подписывался на эту тему, был создан файл *.mal с бесмысленным содержимым: "Guest|" То ли из-за странного любопытсва гостей, то ли из-за поисковиков, но таких бесмысленных файлов за несколько лет работы форума у меня скопилось около тысячи. Предлагаю немного модифицировать сам хак подписки, чтобы не создавались такие записи. В скрипте postings.cgi найти подпрограмму subscribe и в самом ее начале строки: Код: if ($userregistered eq "no"){ &error("Извещения о новых сообщениях&Вы шутите??? Гости не могут подписаться на извещения о новых сообщениях в теме."); } | заменить на такие: Код: if (($membername eq $ibtxt{'0043'}) || ($userregistered eq "no")){ &error("Извещения о новых сообщениях&Вы шутите??? Гости не могут подписаться на извещения о новых сообщениях в теме."); } | Для того чтобы почистить свой форум от ненужных файлов (а заодно и узнать, сколько их у вас скопилось) предлагаю такой скрипт (сохраните его под именем delmal.cgi и поместите его в ту директорию где у вас находятся все рабочие скрипты форума): Код: #!/usr/bin/perl ### (c) olsufr $| = 1; my $thisprog = "delmal.cgi"; ### my $actiontitle = 'Удаление пустых (и бессмысленных) файлов <b>*.mal</b>'; print "Content-Type: text/html\n\n"; &header(); use CGI qw(:standard); $query = new CGI; $inmembername = $query->param('inmembername'); $inpassword = $query->param('inpassword'); if (($inmembername eq '') || ($inpassword eq '')) { $message = 'Введите ваши данные:'; &form(); print '</body></html>'; exit; } if (($inmembername ne 'ruboard') || ($inpassword ne 'ruboard')) { $message = 'Вы ввели ошибочные данные!'; &form(); print '</body></html>'; exit; } $message = 'Авторизация прошла успешно!'; &form(); my $action = $query->param('action'); my $color = 'blue'; if ($action ne 'view') { $action = 'doit'; $color = 'red'; } print qq~<i>$actiontitle: <font color=$color><b>$action</b></font> <br> <br><hr size=1 color=black width=80%><br>~; my ($totalsum,$sum) = (0,0); my $allforumsfile = 'data/allforums.cgi'; unless ( open(FILE, "$allforumsfile") ) { print "<font color=red>Can not open file <b>$allforumsfile</b></font>"; exit; } flock FILE,1; my @forums = <FILE>; close(FILE); @forums = sort @forums; my ($forumid, $forumtitle); foreach $forumline (@forums) { chomp $forumline; ($forumid, $tr, $tr, $forumtitle) = split(/\|/,$forumline); my $forumDir = "./forum$forumid/"; print qq~<font size=4>Форум <b>"$forumtitle"</b> - id: <b>$forumid</b></font><br> <br>~; unless (opendir(DIR, "$forumDir")) { print qq~<font color=red>Can not open forum folder: <b>$forumDir</b></font><br>~; next; } my @topics = readdir(DIR); closedir(DIR); ############################## @topicsmal = grep(/\.mal$/i,@topics); foreach $topicfile (@topicsmal) { my($topicid) = split(/\.mal/i,$topicfile); $topicfile =~m/(.+)\.mal$/i; $topicid = $1; if (open(FILE, "$forumDir$topicfile")) { flock(FILE,1); my @mallines = <FILE>; close(FILE); next if (@mallines > 1); chomp $mallines[0]; my ($name, $email) = split (/\|/,$mallines[0]); if ($email eq '') { &delmal($forumDir,$topicid); } } else { print qq~<font color=red>Can not open file <b>$forumDir$topicfile</b>.</font><br>~; } } print qq~Удалено <b>$sum</b> пустых файлов подписки.<br> <br> <br>~; $totalsum += $sum; $sum = 0; ############################### print "<hr size=1 color=black width=80%><br>"; } print qq~Всего удалено <font color=$color3><b>$totalsum</b></font> пустых файлов подписки.<br> <br> <hr size=1 color=black width=50%> </center> </body> </html>~; sub delmal { my ($forumDir, $topicid) = @_; if ($action eq 'doit') { if (unlink ("$forumDir$topicid.mal")) { $sum++; print qq~Subscribe file $forumDir<b>$topicid.mal</b> is deleted.<br>~; } else { print qq~<font color=red>Can not delete file <b>$forumDir$topicid.mal</b></font><br>~; } } else { $sum++; print qq~Subscribe file $forumDir<b>$topicid.mal</b> must be deleted.<br>~; } } sub header { print qq~<html><head><meta http-equiv="Content-Type" content="text/html; charset=Windows-1251"> <title>$actiontitle</title></head> <body><style> body, td {font-family:Verdana;font-size:10pt;} h3 {font-size:12pt;font-weight:bold;color:#333333;} hr {color:#333333;} </style> <center> <h3>$actiontitle</h3><br> ~; } sub form { print qq~<form action="$thisprog" method="post"> <table> <tr><td valign=middle align=center>$message</td></tr> <tr><td valign=middle align=center> <table> <tr> <td valign=middle align=right>Логин:</td> <td valign=middle><input type=text name="inmembername" value="" size=20 tabindex=1></td> </tr> <tr> <td valign=middle align=right>Пароль:</td> <td valign=middle><input type=password name="inpassword" value="" size=20 tabindex=2></td> </tr> </table> </td></tr> <tr> <td valign=middle align=center><br> <table> <tr><td valign=top align=right><b>Пред. просмотр:</b></td><td><input type=checkbox name="action" value="view" checked> - </td><td>$actiontitle</td> </table><br> </td> </tr> <tr> <td valign=middle align=center><input type=submit name="submit" value="ПУСК" tabindex=3></td> </tr> </table> </form> <hr size=1 width=80%><br> ~; } | Пароль и логин: ruboard Сначала запустите скрипт с нажатой галочкой пред.просмотра, а для реального удаления отожмите ее. | Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 12:55 13-12-2003 | Исправлено: olsufr, 12:59 13-12-2003 |
|