⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fbeditor.cgi

📁 为了下载我没有办法
💻 CGI
字号:
#!/usr/bin/perl
# ///////////////////////////
# //      设定开始。      //
# //////////////////////////
# --------------------------
# 管理者的密码设定
# --------------------------
$password = "sina"; # 管理者密码(英文或数字8字以内)
$font_size = 3;  # 字型大小
$max_tree = 20;  # 管理区内每页表示文章数目
# --------------------------
$cookie_name = 'fbbspro';      # COOKIE名
$logfile   = 'flashbbs.log';   # 记录文章内容档 
$countfile = 'flashbbs.cnt';   # 计算主题数目档
$lockfile  = 'flashbbs.lock';  # 产生锁住文章档
$lock_flag = 0;                # 锁住文章 1:使用 0:不使用
# ////////////////////////////////
# //         设定完了。         //
# ////////////////////////////////
# $ID = $FORM{'id'};
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; }
local(@pairs) = split(/&/,$buffer);
foreach $pair (@pairs) {
    local($name,$value) = split(/=/,$pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
    if ($name eq 'tree_del') { $tree_del[$value] = 1; $del_flag = 1; }
    elsif ($name eq 'del') { $del[$value] = 1; $del_flag = 1; }
    elsif ($name eq 'edit_no') { $edit_no = $value; $edit_flag = 1; }
    elsif ($name eq 'edit_tn') { $edit_tn = $value; $edit_flag = 1; }
    else { $FORM{$name} =$value; }
}
if ($password ne $FORM{'pass'}) { &password_check; }
@logs = &read_file($logfile);
if ($FORM{'mode'} eq 'download') { &download; }
if ($FORM{'mode'} eq 'repair') { &repair; }
if ($FORM{'mode'} eq 'regist') { &regist; }
if ($del_flag) { &delete; }
if ($edit_flag) { &edit; } else { &ichiran; }
exit;
sub password_check {
    &html_header("密码认证");
    print<<"_EOF_";
<CENTER>
输入管理者密码。<P>
<FORM ACTION="fbeditor.cgi" METHOD="post">
<INPUT TYPE="password" NAME="pass" SIZE=10>
<INPUT TYPE="submit" VALUE="确定">
</FORM><P>
(管理员专用区、必须有管理员密码。)
</CENTER>
_EOF_
    &html_footer;
    exit;
}
sub ichiran {
    &html_header("回讨论板");
    $size = (stat($logfile))[7];
    $tree = $FORM{'tree'};
    if ($tree > @logs) { $tree = 0; }
    if (!$tree) { $tree = 0; }
    $tree = int($tree/$max_tree)*$max_tree;
    print<<"_EOF_";
<FORM ACTION="fbeditor.cgi" METHOD="post">
<INPUT TYPE="hidden" NAME="pass" VALUE="$FORM{'pass'}">
<CENTER>
<TABLE>
<TR><TD><FONT SIZE=$font_size FACE="细明体"><TT>记录文章用了<FONT COLOR="red">$size</FONT>bytes。</TT></FONT></TD></TR>
<TR><TD ALIGN=center><TABLE>
<TD><FONT SIZE=$font_size FACE="细明体"><TT>现在选了</TT></FONT></TD>
<TD><SELECT NAME="tree">
_EOF_
    for ($i=0;$i<@logs;$i+=$max_tree) {
        $j=$i/$max_tree+1;
        if ($tree == $i) {
            print" <OPTION VALUE=\"$i\" SELECTED>第$j页\n";
        } else {
            print" <OPTION VALUE=\"$i\">第$j页\n";
        }
    }
    print<<"_EOF_";
</SELECT></TD>
<TD><FONT SIZE=$font_size FACE="细明体"><TT>编辑。</TT></FONT></TD></TR>
</TABLE></TD></TABLE>
<TABLE>
<TH><INPUT TYPE="submit" VALUE="编辑开始"></TH>
<TH><INPUT TYPE="reset" VALUE="取消"></TH>
</TABLE>
</CENTER>
_EOF_
    print"<NOBR>\n";
    $end_tree = $tree + $max_tree;
    if ($end_tree > @logs) { $end_tree = @logs; }
    for ($i=$tree;$i<$end_tree;$i++) {
        @datas = &divide_log($logs[$i]);
        $kiji = @datas;
        $tn = (&divide_data($logs[$i]))[0];
        print "<HR SIZE=1>\n<DIV ALIGN=right><FONT COLOR=\"darkgreen\">(文章数 $kiji)</FONT> <INPUT TYPE=\"checkbox\" NAME=\"tree_del\" VALUE=\"$tn\">[选择删除]</DIV><BR>\n";
        foreach (@datas) {
            local($no,$res,$lx,$tn,$title,$name,$email,$date,$act) = &divide_data($_);
            print "<FONT COLOR=\"brown\">删<INPUT TYPE=\"checkbox\" NAME=\"del\" VALUE=\"$no\"> </FONT>";
            for ($s=0;$s<$lx;$s++) { print " "; }
            print "<FONT COLOR=\"darkgreen\">[$no]</FONT><A HREF=\"fbeditor.cgi?edit_no=$no&edit_tn=$tn&tree=$FORM{'tree'}&pass=$FORM{'pass'}\">$title</A> : $name<FONT COLOR=\"red\">($date)</FONT> <BR>";
        }
    }
    print"</NOBR>\n";
    print<<"_EOF_";
</FORM>
<HR SIZE=1>
<CENTER>
<TABLE>
<FORM ACTION="./fbeditor.cgi" METHOD="post">
<INPUT TYPE="hidden" NAME="pass" VALUE="$FORM{'pass'}">
<INPUT TYPE="hidden" NAME="mode" VALUE="download">
<TH><INPUT TYPE="submit" VALUE="下载"></TH>
</FORM>
<FORM ACTION="fbeditor.cgi" METHOD="post">
<INPUT TYPE="hidden" NAME="pass" VALUE="$FORM{'pass'}">
<INPUT TYPE="hidden" NAME="mode" VALUE="repair">
<TH><INPUT TYPE="submit" VALUE=" 最佳化处理 "></TH>
</FORM>
</TABLE>
</CENTER>
_EOF_
    &html_footer;
}
sub delete {
    foreach $data (@logs) {
        if (!$tree_del[(&divide_data($data))[0]]) {
            @kiji_datas = &divide_log($data);
            $tree_data = '';$flag = 0;
            foreach $data (@kiji_datas) {
                if ($del[(&divide_data($data))[0]]) {
                    local($no,$res,$lx,$tn,$temp,$temp,$temp,$date,$act,$file_pwd,$rhost,$ipad,$temp) = &divide_data($data);
                    $data = "$no<>$res<>$lx<>$tn<><I>[管理员删除]</I><><I>管理员</I><><>null<>9<>Null<><><>将文章删除。";
                }
                if ($flag) { $tree_data .= "<#>"; } else { $flag = 1; }
                $tree_data .= $data;
            }
            push (@new,"$tree_data\n");
        }
    }
    @logs = &write_file($logfile,@new);
}
sub edit {
    &html_header("编辑");
    $kiji_data = &search_no2data($edit_no,&divide_log(&search_no2data($edit_tn,@logs)));    local($no,$res,$lx,$tn,$title,$name,$email,$date,$act,$tm_pwd,$rhost,$ipad,$comment) = &divide_data($kiji_data);
    $kiji_size = length($kiji_data);
    $comment_size = length($comment);
    $comment =~ s/<BR>/\n/g;
    print<<"_EOF_";
<FORM ACTION="fbeditor.cgi" METHOD="post">
<INPUT TYPE="hidden" NAME="pass" VALUE="$FORM{'pass'}">
<INPUT TYPE="hidden" NAME="mode" VALUE="regist">
<INPUT TYPE="hidden" NAME="tree" VALUE="$FORM{'tree'}">
<INPUT TYPE="hidden" NAME="no" VALUE=$no>
<INPUT TYPE="hidden" NAME="tn" VALUE=$tn>
<CENTER>
<TABLE>
<TR><TD COLSPAN=2><FONT SIZE=$font_size FACE="细明体"><TT>编辑文章内容之后、按下[内容更新]。</TT></FONT></TD></TR>
<TR><TABLE>
<TH><INPUT TYPE="submit" VALUE="内容更新"></TH>
<TH><INPUT TYPE="reset" VALUE="取消"></TH>
</TABLE></TR>
</TABLE>
<HR SIZE=1>
<TABLE BORDER=1 BGCOLOR="#DDDDDD">
<TR><TD>
<TABLE><TR><TD><TT>
<B>主题:</B>
</TT></TD><TD>
<INPUT TYPE=text NAME=title SIZE=42 MAXLENGTH=80 VALUE="$title">
</TD></TR><TR><TD><TT>
<B>姓名:</B>
</TT></TD><TD>
<INPUT TYPE=text NAME=name SIZE=42 MAXLENGTH=42 VALUE="$name">
</TD></TR><TR><TD><TT>
<B>电子邮件</B>
</TT></TD><TD>
<INPUT TYPE=text NAME=email SIZE=42 MAXLENGTH=120 VALUE="$email">
</TD></TR></TABLE>
</TD></TR><TR><TD>
<TEXTAREA NAME=comment ROWS=8 COLS=48>$comment</TEXTAREA>
</TD></TR></TABLE>
</FORM>
</CENTER>
<HR SIZE=1>
<BLOCKQUOTE>
<FONT COLOR="darkgreen">文章编号</FONT>:<FONT COLOR="red">$no</FONT><FONT COLOR="darkgreen">回应那则文章</FONT>:<FONT COLOR="red">$res</FONT><FONT COLOR="darkgreen">文章</FONT>:<FONT COLOR="red">$act</FONT><BR>
<FONT COLOR="darkgreen">登录时间</FONT>:<FONT COLOR="red">$date</FONT><BR>
<FONT COLOR="darkgreen">IP位址</FONT>:<FONT COLOR="red">$rhost</FONT><BR>
<FONT COLOR="darkgreen">IP位址</FONT>:<FONT COLOR="red">$ipad</FONT><BR>
<FONT COLOR="darkgreen">文章记忆体</FONT>:约<FONT COLOR="red">$kiji_size</FONT>bytes<BR>
<FONT COLOR="darkgreen">文字数</FONT>:约<FONT COLOR="red">$comment_size</FONT>个
</BLOCKQUOTE>
_EOF_
    &html_footer;
}
sub regist {
    local($title,$name,$email,$comment) = ($FORM{'title'},$FORM{'name'},$FORM{'email'},$FORM{'comment'});
    $title =~ s/\r\n//g;
    $title =~ s/\r|\n//g;
    $name  =~ s/\r\n//g;
    $name  =~ s/\r|\n//g;
    $email =~ s/\r\n//g;
    $email =~ s/\r|\n//g;
    $comment =~ s/\r\n/<BR>/g;
    $comment =~ s/\r|\n/<BR>/g;
    if (length($title) > 80) {
        &error(1,"错误、请重新输入。");
    } elsif (!$title) { $title = "没有主题"; }
    if ((!$name) || (length($name) > 42)) {
        &error(1,"没有输入名字,或者字数过多了。");
    }
    if ((($email !~ /(.*)\@(.*)\.(.*)/) && ($email)) || (length($email) > 120)) {
        &error(1,"不正确的电子邮件、或者字数过多了。");
    }
    if (!$comment) {
        &error(1,"没有输入文章内容、或者字数过多了。");
    }
    foreach $data (@logs) {
        if ($FORM{'tn'} == (&divide_data($data))[0]) {
            @kiji_datas = &divide_log($data);
            $tree_data = '';$flag = 0;
            foreach $data (@kiji_datas) {
                if ($FORM{'no'} == (&divide_data($data))[0]) {
                    local($no,$res,$lx,$tn,$temp,$temp,$temp,$date,$act,$file_pwd,$rhost,$ipad,$temp) = &divide_data($data);
                    $data = "$no<>$res<>$lx<>$tn<>$title<>$name<>$email<>$date<>0<>$file_pwd<>$rhost<>$ipad<>$comment";
                }
                if ($flag) { $tree_data .= "<#>"; } else { $flag = 1; }
                $tree_data .= $data;
            }
            push (@new,"$tree_data\n");
        } else {
            push (@new,$data);
        }
    }
    @logs = &write_file($logfile,@new);
}

sub download {
    print "Content-type: text/download\n\n@logs";
    exit;
}
sub repair {
    foreach $tree (@logs) {
        @datas = &divide_log($tree);
        foreach (@datas) {
            local($no) = &divide_data($_);
            $line = substr("0000",length($line)).$line;
            push(@num,"$no=$line");
            $line++;
        }
    }
    @num = sort(@num);
    for($i=0;$i<@num;$i++) {
        ($no,$line) = (split(/=/,$num[$i]));
        $num = $i + 1;
        $num3[$no] = $num;
        $num = substr("0000",length($num)).$num;
        push(@num2,"$line=$num");
    }
    @num2 = sort(@num2);
    $line = 0;
    foreach $tree (@logs) {
        @datas = &divide_log($tree);
        $flag = 0; $tree_data = '';
        foreach (@datas) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act,$file_pwd,$rhost,$ipad,$comment) = &divide_data($_);
            ($temp,$no) = (split(/=/,$num2[$line++]));
            if ($res ne 'root') { $res = $num3[$res]; }
            $tn = $num3[$tn];
            $kiji_data = "$no<>$res<>$lx<>$tn<>$title<>$name<>$email<>$date<>0<>$file_pwd<>$rhost<>$ipad<>$comment";
            if ($flag){ $tree_data = "$tree_data<#>$kiji_data"; }
            else { $tree_data = $kiji_data; $flag = 1; }
        }
        push(@new,"$tree_data\n");
    }
    @logs = &write_file($logfile,@new);
    $count = &write_file($countfile,$line);
}
sub html_header {
    local($sub_title) = $_[0];
    print "Content-type: text/html\n\n";
    print<<"_EOF_";
<HTML><HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>留言管理[$sub_title]</TITLE>
</HEAD>
<BODY TEXT="black" BGCOLOR="#EEEEEE">
<BASEFONT SIZE=$font_size FACE="细明体"><TT>
<DIV ALIGN="right"><A HREF="flashbbs.cgi?">回讨论板</A></DIV>
<CENTER><BIG><B><I>留言管理</I></B></BIG></CENTER>
<HR>
_EOF_
}
sub html_footer {
    print<<"_EOF_";
<HR SIZE=1>
<DIV ALIGN="center"><TT>
<!-- 著作权表示 (不可删除) -->
版权所有:<A HREF="mailto:datery\@sina.com">72小时</a>
</TT></DIV>
</TT></BASEFONT>
</BODY></HTML>
_EOF_
}
sub divide_log {
    local($data) = $_[0];
    chop($data);
    return split(/<#>/,$data);
}
sub divide_data {
    return split(/<>/,$_[0]);
}
sub search_no2data {
    local($no,@datas) = @_;
    local($data);
    foreach $data (@datas) {
        if ($no == (&divide_data($data))[0]) { return $data; }
    }
    return 0;
}
sub auto_link {
    local($text) = $_[0];

    $text =~ s/(http:\/\/[\w\.\~\-\/\?\&\+\=\:\@\%]+)/<A HREF=\"$1\">$1<\/A>/ig;
    $text =~ s/(ftp:\/\/[\w\.\~\-\/]+)/<A HREF=\"$1\">$1<\/A>/ig;
    $text =~ s/([\w\.\-]+)\@([\w\.\-]+)/<A HREF=\"mailto\:$1\@$2\">$1\@$2<\/A>/ig;
    return $text;
}
sub read_file {
    local($logfile) = $_[0];
    &lock_file($lock1);&lock_file($lock2);
    if ($lock_error) { &error(1,"错误、请过一会重新输入。"); }
    if (!open(IN,$logfile)) { &unlock_file; &error(1,"记录读入不可"); }
    local(@files) = <IN>;
    close(IN);
    &unlock_file($lock2);&unlock_file($lock1);
    return @files;
}
sub write_file {
    local($logfile,@lines) = @_;
    &lock_file($lock1);&lock_file($lock2);
    if ($lock_error) { &error(1,"错误、请过一会重新输入。"); }
    if (!open(OUT,">$logfile")) { &unlock_file; &error(1,"删除不到记录"); }
    print OUT @lines;
    close(OUT);
    &unlock_file($lock2);&unlock_file($lock1);
    return @lines;
}
sub lock_file {
    local($lockfile) = $_[0];
    if (!$lock_flag) { return 1; }
    local($retry) = 5;
    while (-f $lockfile) {
        if ($retry-- <= 0) {
            local($mtime) = (stat($lockfile))[9];
            if ($mtime < time()-60*15) { &unlock_file($lockfile); }
            $lock_error = 1;
            return 1;
        }
        sleep 1;
    }
    open (LOCK,">$lockfile");
    close(LOCK);
    return 1;
}
sub unlock_file {
    local($lockfile) = $_[0];
    unlink($lockfile);
}
sub error {
    ($err,$err_msg) = @_;
    if ($err) { print "Content-type: text/html\n\n<HTML><BODY>"; }
    print<<"_EOF_";
<P><TABLE BGCOLOR="white" CELLPADDING=5 WIDTH=100%><TD ALIGN=center>
<FONT COLOR="red"><B>错误:$err_msg</B></FONT>
</TD></TABLE>
</BODY></HTML>
_EOF_
    exit;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -