📄 setmemberbak.cgi
字号:
next if ($userfilename eq "");
$userinfo = join("\t",@userinfo);
next if ($userinfo eq "");
if ($memberfiletitle ne $userfilename) {
if (open (FILE, ">${lbdir}$memdir/$userfilename")) {
print FILE "$userinfo\n";
close(FILE);
}
}
}
$allusernum --;
# $lastone --;
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>用户库备份</b><br>
<font color=#333333><B>当前共有 $allusernum 个注册用户,已经还原了 $lastone 个用户。。。</b><BR><BR><BR>
<font color=#333333>如果无法自动开始下 $noofone 个用户的还原,请点击下面的链接继续<p>
>> <a href="$thisprog?action=restorenext&beginone=$lastone&noofone=$noofone">继续还原用户库</a> <<
<meta http-equiv="refresh" content="2; url=$thisprog?action=restorenext&beginone=$lastone&noofone=$noofone">
<BR><BR></td></tr>
~;
}
else {
$allusernum --;
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>用户库还原</b><p>
<font color=#333333>用户数据已经还原(坛主 $inmembername 数据未更新),用户备份库中共有 $allusernum 个注册用户!<BR><BR>
</td></tr>
~;
}
}
sub repire {
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="repirenext">输入每次检查修复的用户数
<input type=hidden name="beginone" value=0>
<input type=hidden name="totolerepire" 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 repirenext {
$memberfiletitle = $inmembername;
$memberfiletitle =~ y/ /_/;
$memberfiletitle =~ tr/A-Z/a-z/;
$memberfiletitle .= ".cgi";
open(FILE,"${lbdir}$backupdir/alluser.pl");
my @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 ""));
($userfilename,@userinfo) = split(/\t/,$alluser[$i]);
next if ($userfilename eq "");
$userinfo = join("\t",@userinfo);
next if ($userinfo eq "");
if ($memberfiletitle ne $userfilename) {
$usrfiles = "${lbdir}$memdir/$userfilename";
$usrfiles = "${lbdir}$memdir/old/$userfilename" if (!(-e $usrfiles));
open (FILE, "$usrfiles");
$userdatanow = <FILE>;
close(FILE);
chomp $userdatanow;
my ($membername1, $password1, $no) = split(/\t/,$userdatanow);
if (($membername1 eq "")||($password1 eq "")) {
if (open (FILE, ">${lbdir}$memdir/$userfilename")) {
print FILE "$userinfo\n";
close(FILE);
}
$totolerepire ++;
}
}
}
$allusernum --;
if ($lastone > $allusernum) { $lastone1 = $allusernum; } else { $lastone1 = $lastone; }
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>用户库备份</b><br>
<font color=#333333><B>当前共有 $allusernum 个注册用户,已经检查了 $lastone1 个用户,修复了 $totolerepire 个用户 。。。</b><BR><BR><BR>
<font color=#333333>如果无法自动开始下 $noofone 个用户的检查,请点击下面的链接继续<p>
>> <a href="$thisprog?action=repirenext&beginone=$lastone&noofone=$noofone&totolerepire=$totolerepire">继续修复用户库</a> <<
<meta http-equiv="refresh" content="2; url=$thisprog?action=repirenext&beginone=$lastone&noofone=$noofone&totolerepire=$totolerepire">
<BR><BR></td></tr>
~;
}
else {
$allusernum --;
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>还原数据被破坏的用户</b><p>
<font color=#333333>$totolerepire 个数据被破坏的用户已经还原,目前用户备份库中共有 $allusernum 个注册用户!<BR><BR>
</td></tr>
~;
}
}
sub repireone {
if ($checkaction eq "yes") {
$memberfilename = $member;
$memberfilename =~ y/ /_/;
$memberfilename =~ tr/A-Z/a-z/;
$memberfilename .= ".cgi";
if (-e "${lbdir}$backupdir/alluser.pl") {
open(FILE,"${lbdir}$backupdir/alluser.pl");
my @totlename = <FILE>;
close(FILE);
$totaluserdata = $#totlename;
$repireuser = 0;
foreach (@totlename) {
chomp $_;
next if (($_ =~ /^nodisplay/i)||($_ eq ""));
my ($userfilename,@userinfo) = split(/\t/,$_);
next if ($userfilename eq "");
my $userinfo = join("\t",@userinfo);
next if ($userinfo eq "");
if ($memberfilename eq $userfilename) {
if (open (FILE, ">${lbdir}$memdir/$userfilename")) {
print FILE "$userinfo\n";
close(FILE);
}
$repireuser = 1;
}
}
if ($repireuser eq 1) {
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>还原数据被破坏的用户</b><p>
<font color=#333333>用户 $member 的资料已经还原,目前用户备份库中共有 $totaluserdata 个注册用户!<BR><BR></td></tr>
~;
}
else {
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>还原数据被破坏的用户</b><p>
<font color=#333333>用户备份库中没有用户 $member 的资料,目前用户备份库中共有 $totaluserdata 个注册用户!<BR><BR></td></tr>
~;
}
}
else {
print qq~<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#990000><b>用户库备份文件没有找到</b><p>~;
}
}
else {
print qq~
<tr>
<td bgcolor=#EEEEEE align=center colspan=2><font color=#990000><b>警告!!</b></td></tr>
<tr><td bgcolor=#FFFFFF align=center colspan=2><font color=#333333>只有点击下面的链接才可以还原 $member 用户的数据<p>
>> <a href="$thisprog?action=repireone&member=$member&checkaction=yes">确定还原此用户的数据</a> <<
</td></tr></table></td></tr></table>
~;
}
}
sub memberoptions {
$backupfile = "$lbdir" . "$backupdir/alluser.pl";
if (-e $backupfile) {
$last_backup = (stat("$backupfile"))[9];
$longdatebackup = &fulldatetime("$last_backup");
$last_backup = "$longdatebackup";
$bakuptrue = 0;
}
else {
$last_backup = "用户库备份文件没有找到,可能没有备份过";
$bakuptrue = 1;
}
print qq~<tr><td bgcolor=#EEEEEE align=center colspan=2>
<font color=#990000><b>请选择一项</b></td></tr>
<tr><td bgcolor=#FFFFFF colspan=2><UL>
<font color=#333333><BR>用户库备份文件路径: <B>$backupfile</B><BR>用户库最后备份日期: <B>$last_backup</B><BR><BR></td></tr>
<tr><td bgcolor=#FFFFFF colspan=2>
<font color=#333333><b><a href="$thisprog?action=backup">备份用户数据库</a></b><br>
可以防止用户数据破坏,也可以方便转移用户库数据。<BR>注意:无需时时备份,一般每 3 - 5 日备份一次为宜。<BR><BR></td></tr>
~;
print qq~<tr><td bgcolor=#FFFFFF colspan=2>
<font color=#333333><b><a href="$thisprog?action=restore">还原用户数据库</a></b> <font color=#990000>(为了安全起见,坛主 $inmembername 资料不会还原)</font><br>
转移用户库数据后,或者用户数据被破坏,就可以使用此功能把备份的用户库数据全部还原。<BR>
注意:自备份之后的用户所有更新数据将<font color=#990000><B>全部丢失</B></font>,请慎重使用。<BR><BR>
</td></tr>
~ if ($bakuptrue == 0);
print qq~<tr><td bgcolor=#FFFFFF colspan=2>
<font color=#333333><b><a href="$thisprog?action=repire">利用备份用户库修复丢失的用户</a></b><br>
当由于意外导致部分的用户数据破坏,就可以用此功能恢复。<BR>正常的用户资料不会被还原,只还原被破坏了的用户资料<BR><BR></td></tr>
<tr><td bgcolor=#FFFFFF colspan=2>
<font color=#333333><b>还原单个指定用户的数据</b><br>
当由于意外导致某个用户的数据被破坏,或者需要还原某个用户的资料,就可以用此功能。<BR>
<form action="setmemberbak.cgi" method=get>
<input type=hidden name="action" value="repireone">
<input type=text name="member" size=10 maxlength=16>
<input type=submit value="恢复此用户的资料">
</form>
<BR><BR></td></tr>
~;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -