📄 setmemberbak.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";
$|++;
$thisprog = "setmemberbak.cgi";
$query = new LBCGI;
$action = $query -> param('action');
$action = &unHTML("$action");
$checkaction = $query -> param('checkaction');
$member = $query -> param('member');
$member = &unHTML("$member");
$noofone = $query -> param('noofone');
$noofone = &unHTML("$noofone");
$beginone = $query -> param('beginone');
$beginone = &unHTML("$beginone");
$totolerepire = $query -> param('totolerepire');
$totolerepire = &unHTML("$totolerepire");
$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;
$noofone = 2000 if ($noofone !~ /^[0-9]+$/);
$beginone = 0 if ($beginone !~ /^[0-9]+$/);
$totolerepire = 0 if ($totolerepire !~ /^[0-9]+$/);
opendir (DIRS, "$lbdir");
my @files2 = readdir(DIRS);
closedir (DIRS);
my @backupdir = grep(/^backup/, @files2);
$backupdir=@backupdir;
if ($backupdir eq 0) {
@backupdir = grep(/^BACKUP/, @files2);
rename("${lbdir}BACKUP","${lbdir}backup");
}
if ($backupdir eq 0) {
@backupdir = grep(/^Backup/, @files2);
rename("${lbdir}Backup","${lbdir}backup");
}
$backupdir = $backupdir[0];
&getadmincheck;
print header(-charset=>gb2312);
&admintitle;
&getmember("$inmembername");
if (($membercode eq "ad") && ($inpassword eq $password) && (lc($inmembername) eq lc($membername))) {
print qq~<tr><td bgcolor=#333333" colspan=2><font color=#FFFFFF><b>欢迎来到论坛管理中心 / 用户库备份及还原</b></td></tr>~;
my %Mode = (
'backup' => \&backup,
'backupnext' => \&backupnext,
'repire' => \&repire,
'repirenext' => \&repirenext,
'repireone' => \&repireone,
'restore' => \&restore,
'restorenext' => \&restorenext
);
if ($Mode{$action}) { $Mode{$action}->(); } else { &memberoptions; }
print qq~</table></td></tr></table>~;
}
else {
&adminlogin;
}
print qq~</td></tr></table></body></html>~;
exit;
sub backup {
opendir (DIR, "${lbdir}$memdir/old");
@filedata = readdir(DIR);
closedir (DIR);
@countvar = grep(/\.cgi$/i,@filedata);
$totaluserdata = @countvar;
open(FILE,">${lbdir}$backupdir/allname.cgi");
foreach (@countvar) {
print FILE "$_\n";
}
close(FILE);
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>用户库备份</b><br>
<font color=#333333><B>当前共有 $totaluserdata 个注册用户,准备工作已经完成。</b><BR><BR><BR>
<form action="setmemberbak.cgi" method=get>
<input type=hidden name="action" value="backupnext">输入每次备份的用户数
<input type=hidden name="beginone" value=0>
<input type=text name="noofone" size=3 maxlength=3 value=300>
<input type=submit value="开始备份">
</form>
为了减少资源占用,请输入每次备份的用户数,默认 300,<BR>一般不要超过 600,如果发现备份无法正常完成,请尽量减少这个数目,延长备份时间。<BR><BR>
</td></tr>
~;
}
sub backupnext {
open(FILE,"${lbdir}$backupdir/allname.cgi");
@allname = <FILE>;
close(FILE);
$allnamenum = @allname;
if ($beginone < $allnamenum) {
$lastone = $beginone + $noofone;
$lastone = $allnamenum if ($lastone > $allnamenum);
unlink ("${lbdir}$backupdir/alluser.pl") if ($beginone == 0);
open(FILE,">>${lbdir}$backupdir/alluser.pl");
print FILE "nodisplay.cgi\t11111\tnodisplay\t11111\tnodisplay\t11111\tnodisplay\t11111\tnodisplay\t11111\tnodisplay\t11111\tnodisplay\t11111\t\n" if ($beginone == 0);
for ($i = $beginone; $i < $lastone; $i ++) {
chomp $allname[$i];
$usrnames = "${lbdir}$memdir/$allname[$i]";
$usrnames = "${lbdir}$memdir/old/$allname[$i]" if (!(-e $usrnames));
open(USRFILE,"$usrnames");
$userinfo=<USRFILE>;
close(USRFILE);
chomp $userinfo;
$allname[$i] =~ tr/A-Z/a-z/;
print FILE "$allname[$i]\t$userinfo\n";
}
close(FILE);
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>用户库备份</b><br>
<font color=#333333><B>当前共有 $allnamenum 个注册用户,已经备份了 $lastone 个用户。。。</b><BR><BR><BR>
<font color=#333333>如果无法自动开始下 $noofone 个用户的备份,请点击下面的链接继续<p>
>> <a href="$thisprog?action=backupnext&beginone=$lastone&noofone=$noofone">继续备份用户库</a> <<
<meta http-equiv="refresh" content="2; url=$thisprog?action=backupnext&beginone=$lastone&noofone=$noofone">
<BR><BR></td></tr>
~;
}
else {
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>用户库备份</b><p>
<font color=#333333>当前共有 $allnamenum 个注册用户,数据已经备份结束!<BR><BR>
备份的用户保存在 LB5000 的备份专用目录下(cgi-bin 下的 backup 目录),<BR>绝对路径为</font> ${lbdir}$backupdir/alluser.pl<font color=#333333> ,<BR>为了安全起见,请你立即用 ftp 下载保存。</font></td></tr>
~;
}
}
sub restore {
if (-e "${lbdir}$backupdir/alluser.pl") {
open(FILE,"${lbdir}$backupdir/alluser.pl");
my @allname = <FILE>;
close(FILE);
$allname = @allname;
$allname --;
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>用户库还原</b><br>
<font color=#333333><B>当前共有 $allname 个注册用户,准备工作已经完成。</b><BR><BR><BR>
<form action="setmemberbak.cgi" method=get>
<input type=hidden name="action" value="restorenext">输入每次还原的用户数
<input type=hidden name="beginone" value=0>
<input type=text name="noofone" size=3 maxlength=3 value=300>
<input type=submit value="开始还原">
</form>
为了减少资源占用,请输入每次还原的用户数,默认 300,<BR>一般不要超过 600,如果发现还原无法正常完成,请尽量减少这个数目,延长还原时间。
<BR><BR></td></tr>
~;
}
else {
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>用户库备份文件没有找到</b><p>~;
}
}
sub restorenext {
$memberfiletitle = $inmembername;
$memberfiletitle =~ y/ /_/;
$memberfiletitle =~ tr/A-Z/a-z/;
$memberfiletitle .= ".cgi";
open(FILE,"${lbdir}$backupdir/alluser.pl");
@alluser = <FILE>;
close(FILE);
$allusernum = @alluser;
if ($beginone < $allusernum) {
$lastone = $beginone + $noofone;
$lastone = $allusernum if ($lastone > $allusernum);
for ($i = $beginone; $i < $lastone; $i ++) {
chomp $alluser[$i];
next if (($alluser[$i] =~ /^nodisplay/i)||($alluser[$i] eq ""));
my ($userfilename,@userinfo) = split(/\t/,$alluser[$i]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -