📄 checkboard.cgi
字号:
#!/usr/bin/perl
#############################################################
# LeoBoard ver.5000 / LB5000 / 雷傲超级论坛 ver.5000
#
# 版权所有: 雷傲工作室(原蓝宝石软件工作室)
#
# 制作人 : 山鹰糊 (Shining Hu)
# 花无缺 (Ifairy Han)
#
# 主页地址: http://www.CGIer.com/ CGI 编程者之家
# http://www.LeoBoard.com/ 雷傲论坛支持主页
# http://www.leoBBS.com/ 本论坛直通车
#
#############################################################
BEGIN {
$LBPATH = '.';
my $pgm = $0;
$pgm =~s/\\/\//g;
$pgm =~s/^.*\/([^\/]+)$/$1/g;
unless (-e $LBPATH.'/'.$pgm) {
foreach ($0, $ENV{'SCRIPT_FILENAME'}, $ENV{'PATH_TRANSLATED'}) {
s!\\!/!g; s/^(.*)\/[^\/]+$/$1/g;
if (-e $_ . '/' .$pgm) { $LBPATH = $_; last; }
}
}
unshift (@INC, "$LBPATH");
}
use LBCGI;
$LBCGI::POST_MAX=2000;
$LBCGI::DISABLE_UPLOADS = 1;
$LBCGI::HEADERS_ONCE = 1;
require "lbadmin.lib.pl";
require "data/boardinfo.cgi";
require "lb.lib.pl";
$|++; # Unbuffer the output
$thisprog = "checkboard.cgi";
$query = new LBCGI;
$inforum = $query -> param("forum");
$inforum = &cleaninput("$inforum");
$action = $query -> param("action");
$action = &cleaninput("$action");
$inmembername = $query->cookie("adminname");
$inpassword = $query->cookie("adminpass");
$inmembername =~ s/[\a\f\n\e\0\r\t\`\~\!\@\#\$\%\^\&\*\(\)\+\=\\\{\}\;\'\:\"\,\.\/\<\>\?]//isg;
$inpassword =~ s/[\a\f\n\e\0\r\t\|\@\;\#\{\}\$]//isg;
&getadmincheck;
print header(-charset=>gb2312);
&error("打开文件&老大,别乱黑我的程序呀!") if (($inforum) && ($inforum !~ /^[0-9]+$/));
&admintitle;
&getmember("$inmembername");
if (($membercode eq "ad") && ($inpassword eq $password) && (lc($inmembername) eq lc($membername))) {
if ($action eq "restoreforums") {
$filetoopen = "$lbdir" . "data/allforums.cgi.cgi";
$filetoopen = &stripMETA($filetoopen);
open(FILE, "$filetoopen");
@files = <FILE>;
close(FILE);
$totalforums = @files;
$filetomake = "$lbdir" . "data/allforums.cgi";
$filetomake = &stripMETA($filetomake);
&winlock($filetomake) if ($OS_USED eq "Nt");
open(FILE, ">$filetomake");
flock (FILE, 2) if ($OS_USED eq "Unix");
foreach (@files) {
chomp $_;
print FILE "$_\n";
}
close(FILE);
&winunlock($filetomake) if ($OS_USED eq "Nt");
print qq~
<tr><td bgcolor=#333333 colspan=3><font face=宋体 color=#FFFFFF>
<b>欢迎来到 LB5000 论坛管理中心/检查结果</b>
</td></tr>
<tr><td bgcolor=#FFFFFF colspan=3><font face=宋体 color=#333333>
<b>恢复结果:</b><br><br>您的所有论坛均已恢复。<br><br>现有 $totalforums 论坛在您的主论坛中。
</td></tr>
~;
}
elsif ($action eq "restorelist") {
$filetoopen = "$lbdir" . "forum$inforum/list.bak.cgi";
$filetoopen = &stripMETA($filetoopen);
open(FILE, "$filetoopen");
@files = <FILE>;
close(FILE);
$totaltopics = @files;
$filetomake = "$lbdir" . "boarddata/list$inforum.cgi";
$filetomake = &stripMETA($filetomake);
&winlock($filetomake) if ($OS_USED eq "Nt");
open(FILE, ">$filetomake");
flock (FILE, 2) if ($OS_USED eq "Unix");
foreach (@files) {
chomp $_;
print FILE "$_\n";
}
close(FILE);
&winunlock($filetomake) if ($OS_USED eq "Nt");
print qq~
<tr><td bgcolor=#333333 colspan=3><font face=宋体 color=#FFFFFF>
<b>欢迎来到 LB5000 论坛管理中心/检查结果</b>
</td></tr>
<tr><td bgcolor=#FFFFFF colspan=3><font face=宋体 color=#333333>
<b>恢复结果:</b><br><br>您的“$inforum”论坛的 list.cgi 已经恢复<br><br> 现有 $totaltopics 主题在此论坛。
</td></tr>
~;
}
else {
$filetoopen = "$lbdir" . "data/allforums.cgi";
$filetoopen = &stripMETA($filetoopen);
open(FILE, "$filetoopen");
@files = <FILE>;
close(FILE);
$check = @files;
$check = "failed" unless ($check > 0);
$filetoopen = "$lbdir" . "data/allforums.cgi.cgi";
$backup_file = "true" if (-e $filetoopen);
$allforums = qq~所有论坛数据文件找到</font>~;
if (($check eq "failed") && ($backup_file eq "true")) {
$allforums = qq~<b>警告!所有论坛数据文件已被破坏!</b> - <a href=$thisprog?action=restoreforums>恢复所有论坛数据文件</a>~;
}
if ($backup_file eq "true") {
$allforums_backup = qq~所有论坛数据备份文件找到~;
}
else {
$allforums_backup = qq~<b>没有</b>备份数据文件(如果是第一次建立,是正常的)。~;
}
my $checkallforums=0;
foreach (@files) {
chomp($_);
($tempno, $trash) = split(/\t/,$_);
$filetoopen = "$lbdir" . "boarddata/list$tempno.cgi";
$filetoopen = &stripMETA($filetoopen);
open(FILE, "$filetoopen");
@test = <FILE>;
close(FILE);
$filetocheck = "$lbdir" . "forum$tempno/list.bak.cgi";
$filetocheck = &stripMETA($filetocheck);
if (-e $filetocheck) {
$listback_up = "true";
}else{
&winlock($filetocheck) if ($OS_USED eq "Nt");
open(FILE, ">$filetocheck");
flock (FILE, 2) if ($OS_USED eq "Unix");
foreach (@test) {
chomp $_;
print FILE "$_\n";
}
close(FILE);
&winunlock($filetocheck) if ($OS_USED eq "Nt");
$listback_up = "failed";
}
$check = @test;
$check = "failed" unless ($check > 0);
if (($check eq "failed") && ($listback_up eq "true")){
$result = "论坛 $tempno 含有错误的 list.cgi 文件 - <a href=\"$thisprog?action=restorelist&forum=$tempno\">从备份中恢复</a>";
}
elsif (($check eq "failed") && ($listback_up eq "failed")){
$result = "论坛 $tempno 含有错误的 list.cgi 文件 - <a href=\"setforums.cgi?action=recount&forum=$tempno\">更新索引恢复</a>";
if (($tempno eq "")||($tempno !~ /^[0-9]+$/)){
$result = "论坛分类文件含有错误 - 自动修正" ;
$checkallforums=1;
}
}
else {
$result = "论坛 $tempno 测试通过";
}
push (@results, $result);
}
if ($checkallforums==1){
$filetoopen = "$lbdir" . "data/allforums.cgi";
$filetoopen = &stripMETA($filetoopen);
open(FILE, ">$filetoopen");
foreach (@files){
chomp($_);
($tempno, $trash) = split(/\t/,$_);
if (($tempno ne "")&&($tempno =~ /^[0-9]+$/)){
print FILE "$_\n";
}
}
close(FILE);
}
print qq~
<tr><td bgcolor=#333333 colspan=3><font face=宋体 color=#FFFFFF>
<b>欢迎来到 LB5000 论坛管理中心/测试结果</b>
</td></tr>
<tr><td bgcolor=#FFFFFF colspan=3><font face=宋体 color=#333333>
<b>检测结果:</b><br><br>
您的论坛数据检测完毕,没有文件损坏或丢失。<br> <font color=#FF0000><b>如果您正在修改论坛,或是正在论坛发言,那么您将得到错误信息。</b>
<font face=宋体 color=#333333>
<br><br>
<b>检查 allforums.cgi 文件:</b> <br><br>$allforums<br><br></font>
<font face=宋体 color=#333333>
<b>检查所有论坛备份文件:</b> <br><br>$allforums_backup</font>
<hr>
<font face=宋体 color=#333333>
<br><b>每个目录下的 list.cgi 文件的检查结果:</b>
<br><br>
~;
foreach (@results) {
chomp $_;
print qq($_<br><br>\n);
}
print qq~
<br><hr><br><i>报告结束</i>
</td></tr>
~;
}
}
else {
&adminlogin;
}
print qq~</table></td></tr></table></td></tr></table></body></html>~;
exit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -