Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Темы форума пропадают

Модерирует : Antuan

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4

Открыть новую тему     Написать ответ в эту тему

CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В начале скрипта, после #!/usr/bin/perl
вставляем строчку  
use CGI::Carp "fatalsToBrowser";
 
и ошибку отписываем сюда!

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 01:13 26-05-2006
GOOSE



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt
 
Таже фигня... 500 и ничего больше...


----------
AutoPlay Media Studio по-русски!
Русский хелп AutoPlay Media Studio

Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 01:17 26-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ща затестю еще на одном хосте, выложил скрипт только потому, как на локале+на инфобоксе проверил!
 
Выложил на ателксе - тоже пашет...
Не пойму что у тебя с хостом.
http://watchforyou.ru/cgi-bin/board/fcheck.pl

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 01:25 26-05-2006 | Исправлено: CheRt, 01:31 26-05-2006
GOOSE



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt
Блин...  
Не знаю, что у меня такое, но не работает ваще!
 


----------
AutoPlay Media Studio по-русски!
Русский хелп AutoPlay Media Studio

Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 01:42 26-05-2006 | Исправлено: GOOSE, 10:19 26-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GOOSE, так, стандартная проверка - переносы unix или виндоус? Может закачал в бинарном режиме?
Открой файл ФТП-клиентом и посмотри, если вместо переносов квадратики - исправляй, например скопировал отсюда прямо в ФТП-редактирование.


----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 01:49 26-05-2006
GOOSE



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt
Закачал вроде нормально...
Что CGI, что PL качаются не в бинарном...
Но на всякий пожарный ручками поставил ASCII и перекачал...
 
А вот что в логах:

Код:
 
Premature end of script headers: restore.pl
Can't find string terminator "HTML" anywhere before EOF at restore.pl line 25.
Can't open perl script "\r": No such file or directory
Can't find string terminator "HTML" anywhere before EOF at restore.pl line 25., referer: http://forum.ru-board.com/topic.cgi?forum=21&topic=141&glp
Premature end of script headers: restore.pl, referer: http://forum.ru-board.com/topic.cgi?forum=21&topic=141&glp
 


----------
AutoPlay Media Studio по-русски!
Русский хелп AutoPlay Media Studio

Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 02:08 26-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ясно все, ищем строки

Код:
HTML

и проверяем чтобы ничего кроме HTML там небыло, в том числе и пробелов!

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 02:11 26-05-2006
GOOSE



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt
Пробелы я уже раньше убрал...
Давай так проверим: кинь мне скрипт на мыло avguz[gav]rambler[dot]ru
а я его запущу.  
У меня ваще как то было, что FTP глючил, а у меня дома кроме CuteFTP больше ничего нет....

----------
AutoPlay Media Studio по-русски!
Русский хелп AutoPlay Media Studio

Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 02:24 26-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GOOSE, сорри, я идиот, а еще и программер со стажем =)
 
Не догадался сразу через strict прогнать.
Вот так должно работать у всех!
 

Код:
 
#!/usr/bin/perl
use strict;
use CGI qw/param/;
 
my $forumdir='.';
my $forumnum=param('forum'); $forumnum=~s/[^\d]//g;
my $action=param('action');
 
my $header="Content-type:text/html;Charset:windows-1251;\n\n";
 
# begin program
if ($forumnum) {
 if ($action eq 'rebuild') {
  rebuildforum();
  start("Восстановление завершено, проверьте состояние!");
 } else {
  checkforum();
 }
} else {
 &start;
}
 
sub start {
 my $msg=shift;
 my @forums=get_forums();
print <<HTML;
$header
<html>
 <head>
  <title>IB forum tester :: start</title>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
 </head>
 <body>
  $msg<br><br>
 
  <form method="GET" action="$ENV{'SCRIPT_NAME'}">
   <select name="forum">
    <option value="no">Выберите форум:
HTML
 
foreach (sort @forums) {
 m/forum(\d+)/i;
 print "    <option value=\"$1\">Forum$1<br>\n";
}
 
print <<HTML;
   </select>
   <input type="submit" value="Проверить">
  </form>
 </body>
</html>
HTML
}
 
sub checkforum {
 my @list=get_list();
 my @thds=get_thd(); @thds=sort {$a<=>$b} @thds;
 my @pls=get_pl(); @pls=sort {$a<=>$b} @pls;
 
 my $pl_size=@pls;
 my $thd_size=@thds;
 my $list_size=@list;
 
 my $error="Проверка успешна. Проблем не выявлено.";
 
 if ($list_size!=$pl_size || $thd_size!=$pl_size) {
  if ((($list_size!=$pl_size) && ($pl_size==$thd_size || $list_size==$thd_size)) || ($thd_size>$pl_size && $thd_size>$list_size)) {
   $error="Форум не целостен, <a href=\"$ENV{'SCRIPT_NAME'}?action=rebuild&forum=$forumnum\">восстановить?</a>";
  } else {
   $error="Форум не целостен, восстановлению не подлежит!";
  }
 }
 
print <<HTML;
$header
<html>
 <head>
  <title>IB forum tester :: checking</title>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
 </head>
 <body>
  Number of PLS - $pl_size<br>
  Number of THDS - $thd_size<br>
  List size - $list_size<br>
  $error<br>
  <a href="$ENV{'SCRIPT_NAME'}">to start</a>
 </body>
</html>
HTML
}
 
sub rebuildforum {
 my @list=get_list();
 my @thds=get_thd(); @thds=sort {$a<=>$b} @thds;
 my @pls=get_pl(); @pls=sort {$a<=>$b} @pls;
 
 my $pl_size=@pls;
 my $thd_size=@thds;
 my $list_size=@list;
 
 if ($thd_size==$list_size && $pl_size<$list_size) {
  make_pls_by_list(@list);
 } elsif ($thd_size==$pl_size && $pl_size>$list_size) {
  make_list_by_pls(@pls);
 } elsif ($pl_size<$thd_size && $list_size<$thd_size) {
  make_listandpls_by_thd(@thds);
 }
}
 
sub make_list_by_pls {
 my @pls=@_; my $temp;
 @pls=reverse(@pls);
 my $i;
 
 open(LF, ">>$forumdir/forum$forumnum/list.cgi");
 foreach $i(0..$#pls) {
  open(PLF, "$forumdir/forum$forumnum/$pls[$i]");
   $temp=<PLF>;
  close(PLF);
 
  print LF $temp;
 }
 close(LF);
}
 
sub make_pls_by_list {
 my @list=@_;
 
 foreach (@list) {
  m/^(\d+)\|/;
  open(PLF, ">$forumdir/forum$forumnum/$1.pl");
   print PLF $_;
  close(PLF);
 }
}
 
sub make_listandpls_by_thd {
 my @thds=@_;
 my (@data,@temp,$temp,$i,$j,$k);
 
 open(LF, ">$forumdir/forum$forumnum/list.cgi");
 foreach $i(0..$#thds) {
  @data=();
  open(THF, "$forumdir/forum$forumnum/$thds[$i]");
   $j=0;
   while(<THF>) {
    @temp=split(/\|/, $_);
    for ($k=0;$k<@temp;$k++) {
     $data[$j][$k]=$temp[$k];
    }
    $j++;
   }
  close(THF);
 
  $thds[$i]=~m/^(\d+)\.thd$/i;
 
  open(PLF, ">$forumdir/forum$forumnum/$1.pl");
   $temp=$#data*(int(rand 4)+4)-int(rand 4);
   print PLF "$1|$data[0][1]|-|open|$#data|$temp|$data[0][0]|$data[0][5]|$data[$#data][0]|$data[$#data][5]|no\n";
  close(PLF);
   print LF "$1|$data[0][1]|-|open|$#data|$temp|$data[0][0]|$data[0][5]|$data[$#data][0]|$data[$#data][5]|no\n";
 }
 close(LF);
}
 
sub get_thd {
 opendir(FD, "$forumdir/forum$forumnum");
  @_=grep{/\.thd/i} readdir(FD);
 closedir(FD);
 
 return @_;
}
 
sub get_pl {
 opendir(FD, "$forumdir/forum$forumnum");
  @_=grep{/\.pl/i} readdir(FD);
 closedir(FD);
 
 return @_;
}
 
sub get_list {
 open(LF, "$forumdir/forum$forumnum/list.cgi");
  @_=<LF>;
 close(LF);
 
 return @_;
}
 
sub get_forums {
 opendir(FD, $forumdir);
  @_=readdir(FD);
 closedir(FD);
 
 my @forums;
 my $counter=0;
 
 for (my $i=0;$i<@_;$i++) {
  if ($_[$i]=~m/^forum\d{1,2}/i && ! (-f $_[$i])) {
   $forums[$counter]=$_[$i];
   $counter++;
  }
 }
 
 return @forums;
}
1;
 

 


----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 03:15 26-05-2006 | Исправлено: CheRt, 03:18 26-05-2006
GOOSE



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt
Скрипт заработал, но восстанавливать не хочет...
Пишет:
Код:
 
Number of PLS - 437
Number of THDS - 434
List size - 92
Форум не целостен, восстановлению не подлежит!
to start  

Или так:
Код:
 
Number of PLS - 27
Number of THDS - 25
List size - 25
Форум не целостен, восстановить?
to start  

Жму восстановить, он пишет:
Код:
 
Восстановление завершено, проверьте состояние!

Проверяю и получаю тоже самое...
Код:
 
Number of PLS - 27
Number of THDS - 25
List size - 25
Форум не целостен, восстановить?
to start  
 


----------
AutoPlay Media Studio по-русски!
Русский хелп AutoPlay Media Studio

Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 12:17 26-05-2006 | Исправлено: GOOSE, 12:22 26-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GOOSE, ааааааааа, как у тебя PL-ок оказалось больше, чем нитей? Он у тебя и не хочет по этому, глупый пока скриптик =)
 
Разложи логику в виде: если (так и так) делаем 1, если (так или (так и так)) - делаем  и т.д.
 
Трудно описывать глюки, с коими сам не сталкивался

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 13:20 26-05-2006
GOOSE



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt
С логикой так (я не программер, сорри):
1. Проверяем соответствие количества PLок, THDшек и строк в list.cgi.
2. Если совпадает, то выводим радостную весть, если не совпадает, то
3. Берем пару с одним номером (THDшку и PLку) и выбираем из THDшки инфу, записывая ее в PLку.
4. Пункт 3 повторяем для всех "битых" пар.
5. Восстанавливаем list.cgi, записывая в него восстановленные PLки (вот только я не знаю, в каком порядке они пишутся в list.cgi)
 
Вот, думаю, что таким образом.
По крайней мере, если восстанавливать ручками, то именно так я и делал.


----------
AutoPlay Media Studio по-русски!
Русский хелп AutoPlay Media Studio

Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 14:45 26-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Логика которая сейчас:
1. Достаем размеры PL, THD, LIST (по THD и PL только по кол-ву файлов, сделаю еще проверку на пустотность)
2. PL, THD и LIST совпадают по кол-ву => все ок. Дальше перебиваем.
3. Если THD=LIST and PL<LIST => восстанавливаем PL по LIST
4. Если THD=PL and LIST<PL => восстанавливаем LIST по PL (пишем по номеру в обратном порядке, т.е. 1-й будет последняя и т.д., потом добавлю логику проверки по дате модификации из THD)
5. Если THD>PL and THD>LIST => восстанавливаем PL и LIST по THD.
6. Если THD<PL and THD<LIST => восстановлению не подлежит  
7. Иначе => все ок.
 
Вот исходя из такой логики и добавления делай.
 
P.S. формула расчета просмотров: кол-во_просмотров=кол-во_ответов*целое_от(случайное в диапазоне 4..8) - 4
Есть еще варианты, "на вскидку" мне так показалось почти идеально.

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 14:59 26-05-2006 | Исправлено: CheRt, 15:00 26-05-2006
GOOSE



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt

Цитата:
Вот исходя из такой логики и добавления делай.  

Это нереально Я не программист ни разу... Сам не смогу...
Или ты о логике?
Кстати!
Пункт 5, 6 нужно немного изменить...  
5. Если THD>PL and THD>LIST => восстанавливаем PL и LIST по THD.  
6. Если THD<PL and THD<LIST => восстановлению не подлежит  
Так некорректно, что у меня и происходит. Смотри, у меня THD<PL, но THD>LIST !
Восстановление ЧАСТИ файлов возможно, а скрипт пишет, что восстановлению не подлежит
Мне кажется, что правильнее "брать интеграл по частям": восстановить ВОЗМОЖНЫЕ пары THD\PL, а уж потом из них восстановить LIST

----------
AutoPlay Media Studio по-русски!
Русский хелп AutoPlay Media Studio

Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 17:09 26-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GOOSE, ок ночью покопаюсь, еще будут предложения?
 
 
А насчет логики - ненадо быть программистом, просто подумай
 
Один из твоих примеров -  

Код:
 
Number of PLS - 27  
Number of THDS - 25  
List size - 25  
Форум не целостен, восстановить?  
to start  
 

 
А что здесь восстанавливать, если .thd все равно нет? Можно list. Но самих тем не будет (

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 17:54 26-05-2006
GOOSE



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt
Да это я понимаю! Максимум, что можно восстановить - это сколько есть THD.
А в данном примере нужно "убить" лишние PLки, не имеющие пары THD. И тогда ответ скрипта будет - Всё ОК!
Плюс: проблемы "нулевых" PLок... Сам файл есть, но инфы в нем нет, соответственно и темы нет...

----------
AutoPlay Media Studio по-русски!
Русский хелп AutoPlay Media Studio

Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 18:18 26-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ловим новую версию. Теперь еще и сортирует по дате, если поврежден list.cgi.
Правда так и не воспринимает стикнутых тем.  
 
DOWNLOAD


----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 02:15 27-05-2006
GOOSE



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt
 
Все работает!
Действительно, стики не понимает, но это можно и поправить
Плюс, убивает все имеющиеся описания. Что тоже не смертельно!
А что если добавить проверку на имеющиеся описания и их перезапись?
Вкупе со стиком будет просто супер!
Огромнейшее спасибо!!!

----------
AutoPlay Media Studio по-русски!
Русский хелп AutoPlay Media Studio

Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 10:33 29-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GOOSE, v0.1, сделаем дальше лучше. Хотя полная версия врят ли когда-ибо выйдет.
Сегодня времени нет, завтра выпущу 0.1.1

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 19:29 29-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Версии 0.1.1 не будет, сразу переходим к 0.2.0.
 
Описывать не буду, просто посмотрите на изменения.
 
DOWNLOAD
 
Alternative DOWNLOAD
 
Из минусов - ресурсов теперь скрипт жрет поболее.

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 02:11 31-05-2006 | Исправлено: CheRt, 16:20 31-05-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Темы форума пропадают


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru