📄 flashbbs.cgi
字号:
#!/usr/bin/perl
# //////////////////////////
# // 设定开始。 //
# //////////////////////////
# -------------------------
# 讨论板文章记录数设定。
# -------------------------
$max_size = 99 *1024; # 记事削除开始记录(约n 最低 1500)
$max_tree = 30; # 设定多少篇文章为一页。
$max_msg = 6000; # 文章内容最大字数
$new_kiji = 10; # 最新文章[NEW]数目
# --------------------------
# 讨论板管理者资料。
# --------------------------
$admin_name = '72小时'; # 管理者名字。
$admin_email = 'datery@sina.com'; # 管理者Email。
# --------------------------
#
# --------------------------
$title = "论坛"; # 讨论板的<title>文字
$body = '<BODY TEXT="#000000" LINK="#8080ff" VLINK="#ff8080" ALINK="#ff80c0" BGCOLOR="#ffffff">'; # <BODY> 设定
$backurl = "../"; # 离开讨论板URL
$date = "mon/day hour:min"; # 时间显示格式
$time="-8"; # 调整时差,若比本地慢12小时,则输入+12,若比本地快12小时,则输入-12
$date_type = 1; # 时间显示设定
# 0:不显示 1:显示(时分秒) 2:显示(全部)
$em_color = "#000000"; # 显示时间颜色
$kiji_title_color = "#000000"; # 主题区文字颜色
$kiji_title_bgcolor = "#ffe680"; # 文章主题背景颜色
$form_bgcolor = "#CED1B5"; # 发言表单背景颜色
$res_color = "#444499"; # 颜色
$gif_allnews = '../all_news.gif'; # 标准选择用的 GIF IMAGE
$gif_news = '../news.gif'; # 标准选择用的 GIF IMAGE
$gif_new_news = '../new_news.gif'; # 最新文章用的 GIF IMAGE
$gif_space = '../space.gif'; # 透明的 GIF IMAGE
$gif_width = 20; # GIF IMAGE 的横度
$gif_height = 14; # GIF IMAGE 的高度
$tree_width = 30; # Tree Width
$html_title=<<"_EOF_"; # HTML 设定(标题)
<CENTER>
<img border=0 src="http://ads.51.net/cgi-bin/getimage.cgi?AD=domain" width=468 height=60>
</CENTER><P>
_EOF_
$html_info=<<"_EOF_"; # HTML 设定 (欢迎)
<CENTER>欢迎大家发表问题</CENTER>
<P>
_EOF_
# --------------------------------
$base_url = ""; # 拒绝那 URL (http://~) 的连结发表文章
$cookie_name = 'fbbspro'; # COOKIE名
$logfile = 'flashbbs.log'; # 记录文章内容档 (URL路径)
$countfile = 'flashbbs.cnt'; # 计算主题数目档 (URL路径)
$lock1 = 'fbbs1.lock'; # 产生锁住文章档(1) (URL路径)
$lock2 = 'fbbs2.lock'; # 产生锁住文章档(2) (URL路径)
$lock_flag = 0; # 锁住文章 1:使用 0:不使用
# ////////////////////////////////
# // 设定完了。 //
# ////////////////////////////////
# $ID = $FORM{'id'};
&read_form;
&get_cookie;
&check_cookie;
@logs = &read_file($logfile);
if ($FORM{'md'} eq 'reg') { ®ist; }
elsif ($FORM{'md'} eq 'del') { &delete; }
elsif ($FORM{'md'} eq 'viw') { &view; }
elsif ($FORM{'md'} eq 'new') {
&html_header("加入主题");print"<HR width=80\% color=ffcc00>\n";&html_form('root');
}
elsif ($FORM{'md'} eq 'set') { &set; }
elsif ($FORM{'md'} eq 'num') { &number; }
else { &ichiran; }
&html_footer;
exit 0;
# [部分表示 ]
sub html_header {
local($sub_title) = $_[0];
local($font_size) = ($COOKIE{'font'} > 0) + 3;
print "Content-type: text/html\n\n";
print<<"_EOF_";
<HTML><HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META NAME="KeyWord" CONTENT="FlasH BBS Pro">
<TITLE>$title [$sub_title]</TITLE>
</HEAD>
$body
<BASEFONT SIZE=$font_size FACE="新细明体"><TT>
$html_title
<CENTER>
[
<A HREF="flashbbs.cgi?id=$ID">回讨论板</A> / <A HREF="flashbbs.cgi?id=$ID&md=num">最新文章</A> / <A HREF="flashbbs.cgi?id=$ID&md=new">加入主题</A> / <A HREF="fbeditor.cgi?id=$ID">管理用</A>
]
</CENTER><P>
_EOF_
}
# [ 著作权表示 ]
sub html_footer {
print<<"_EOF_";
<HR color=ffcc00>
<DIV ALIGN="center"><TT>
<!-- 管理者表示 -->
讨论板管理者 <A HREF="mailto:$admin_email">$admin_name</A> :
<!-- 著作权表示 (不可删除。) -->
版权所有:<A HREF="mailto:datery\@sina.com">72小时</a>
</TT></DIV>
</TT></BASEFONT>
</BODY></HTML>
_EOF_
}
# [ 回讨论板 ]
sub ichiran {
&set_cookie;
&html_header("讨论板");
$count = (&read_file($countfile))[0];
$tree = $COOKIE{'tree'};
if ($tree > @logs) { $tree = 0; }
if (!$tree) { $tree = 0; }
$tree = int($tree/$max_tree)*$max_tree;
print<<"_EOF_";
$html_info
<CENTER>
<TABLE>
<FORM ACTION="flashbbs.cgi">
<INPUT TYPE="hidden" NAME="id" VALUE="$ID">
<INPUT TYPE="hidden" NAME="md" VALUE="new">
<TH><INPUT TYPE="submit" VALUE="加入主题" style=\"height:23px;background-color:#FFCC00;border:1 solid black\"> </TH>
</FORM>
<FORM ACTION="flashbbs.cgi" METHOD="post">
<INPUT TYPE="hidden" NAME="id" VALUE="$ID">
<TH>
<SELECT NAME="font" style=\"background-color:#FFF9CA;border:1 solid black\">
_EOF_
if (!$COOKIE{'font'}) {
print"<OPTION VALUE=\"0\" SELECTED>标准文字\n";
print"<OPTION VALUE=\"1\">扩大文字\n";
} else {
print"<OPTION VALUE=\"0\">标准文字\n";
print"<OPTION VALUE=\"1\" SELECTED>扩大文字\n";
}
print<<"_EOF_";
</SELECT>
</TH><TH>
<SELECT NAME="sort" style=\"background-color:#FFF9CA;border:1 solid black\">
_EOF_
if (!$COOKIE{'sort'}) {
print"<OPTION VALUE=\"0\" SELECTED>时间顺序\n";
print"<OPTION VALUE=\"1\">主题顺序\n";
} else {
print"<OPTION VALUE=\"0\">时间顺序\n";
print"<OPTION VALUE=\"1\" SELECTED>主题顺序\n";
@logs = reverse(sort(@logs));
}
print<<"_EOF_";
</SELECT>
</TH><TH>
<SELECT NAME="tree" style=\"background-color:#FFF9CA;border:1 solid black\">
_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>
</TH><TH>
<INPUT TYPE="submit" VALUE="确定" style=\"height:23px;background-color:#FFCC00;border:1 solid black\">
</TH>
</FORM>
</TABLE>
</CENTER>
_EOF_
print"<PRE>\n";
$end_tree = $tree + $max_tree;
if ($end_tree > @logs) { $end_tree = @logs; }
for ($i=$tree;$i<$end_tree;$i++) {
print"<HR color=ffcc00>";
@datas = ÷_log($logs[$i]);
foreach (@datas) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act) = ÷_data($_);
if ($res eq 'root') {
print "<A HREF=\"flashbbs.cgi?id=$ID&md=set&tn=$tn\"><IMG SRC=\"$gif_allnews\" WIDTH=$gif_width HEIGHT=$gif_height BORDER=0></A>";
} else {
local($space_width) = $gif_width+$tree_width*$lx;
print "<IMG SRC=\"$gif_space\" WIDTH=$space_width HEIGHT=$gif_height>";
}
print "<A HREF=\"flashbbs.cgi?id=$ID&md=viw&no=$no&tn=$tn\">";
if ($no > $count - $new_kiji) {
print "<IMG SRC=\"$gif_new_news\" WIDTH=$gif_width HEIGHT=$gif_height BORDER=0>";
} else {
print "<IMG SRC=\"$gif_news\" WIDTH=$gif_width HEIGHT=$gif_height BORDER=0>";
}
print "$title</A> : ";
if ($COOKIE{'name'} eq $name) {
print "<B>$name</B>";
} else { print $name; }
print " <FONT COLOR=\"$em_color\">($date)</FONT>\n";
}
}
print"</PRE>\n";
}
# [ 个别记事内容]
sub view {
&html_header("文章($FORM{'no'})");
@kiji_datas = ÷_log(&search_no2data($FORM{'tn'},@logs));
$kiji_data = &search_no2data($FORM{'no'},@kiji_datas);
print"<HR width=80\% color=ffcc00>\n";
&kiji_view($kiji_data);
print"<HR width=80\% color=ffcc00>\n";
local($no,$rq_res,$lx,$tn,$title,$name,$email,$date,$rq_act,$file_pwd,$rhost,$ipad,$comment) = ÷_data($kiji_data);
foreach (@kiji_datas) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act,$pwd,$rhost,$ipad,$comment) = ÷_data($_);
if ($rq_res == $no) {
$parent = "▲ <A HREF=\"flashbbs.cgi?id=$ID&md=viw&no=$no&tn=$FORM{'tn'}\">$title</A> : $name<FONT COLOR=\"$em_color\">($date)</FONT>\n";
}
if (($res == $FORM{'no'}) && ($res ne 'root')) {
$children .= "▼ <A HREF=\"flashbbs.cgi?id=$ID&md=viw&no=$no&tn=$FORM{'tn'}\">$title</A> : $name<FONT COLOR=\"$em_color\">($date)</FONT>\n";
}
}
if ($rq_res eq 'root') { $parent = "<FONT COLOR=\"red\">没有上一则文章。</FONT>"; }
elsif (!$parent) { $parent = "<FONT COLOR=\"$em_color\"></FONT>"; }
if (!$children) { $children = "<FONT COLOR=\"red\">没有回应文章。</FONT>"; }
print<<"_EOF_";
<PRE>[上一则文章]<P>
$parent
<HR width=80\% color=ffcc00>
[下一则文章]<P>
$children</PRE>
<HR width=80\% color=ffcc00>
<CENTER>回应这篇文章、在以下表单输入内容。</CENTER>
_EOF_
if ($rq_act > 6) {
print "<P><CENTER>不可能回履文章。</CENTER>\n";
return 0;
}
if ($title =~ /^Re\[(\d+)\]:/){
local($ct) = $1;
$ct++;
$title =~ s/Re\[\d+\]:/Re\[$ct\]:/;
} elsif ($title =~ /^Re:/){
$title =~ s/Re:/Re\[2\]:/;
} else {
$title = "Re:$title";
}
$comment = "<BR>$comment";
$comment =~ s/<BR>((>)+)/\n$1>/ig;
$comment =~ s/<BR>/\n> /ig;
$comment =~ s/\n//;
&html_form($FORM{'no'},$title,$comment,$FORM{'tn'},$lx);
if (crypt($COOKIE{'pwd'},"FlasH_BBS_Pro") eq $file_pwd) {
print<<"_EOF_";
<HR width=80\% color=ffcc00>
<CENTER>
<FORM ACTION="flashbbs.cgi" METHOD="post">
<INPUT TYPE=hidden NAME=id VALUE=$ID>
<INPUT TYPE=hidden NAME=md VALUE="del">
<INPUT TYPE=hidden NAME=tn VALUE="$FORM{'tn'}">
<INPUT TYPE=hidden NAME=no VALUE="$FORM{'no'}">
<INPUT TYPE=hidden NAME=pwd VALUE="$COOKIE{'bbs_pwd'}">
<INPUT TYPE=submit VALUE="文章内容删除" style=\"height:23px;background-color:#FFCC00;border:1 solid black\">
</FORM>
(删除这则文章内容)
</CENTER>
_EOF_
}
}
# [ 全部表示 ]
#
sub set {
&html_header("全部表示");
print<<"_EOF_";
<A NAME="list">
<HR width=80\% color=ffcc00>
<CENTER>全部表示</CENTER><P>
<PRE>
_EOF_
@kiji_datas = ÷_log(&search_no2data($FORM{'tn'},@logs));
foreach (@kiji_datas) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act) = ÷_data($_);
$no = int($no);
$reply[$res] .= "$no-";
if ($res eq 'root') {
print "<IMG SRC=\"$gif_allnews\" WIDTH=$gif_width HEIGHT=$gif_height BORDER=0>";
} else {
local($space_width) = $gif_width+$tree_width*$lx;
print "<IMG SRC=\"$gif_space\" WIDTH=$space_width HEIGHT=$gif_height>";
}
print "<A HREF=\"#$no\"><IMG SRC=\"$gif_news\" WIDTH=$gif_width HEIGHT=$gif_height BORDER=0>$title</A> : $name<FONT COLOR=\"$em_color\">($date)</FONT>\n";
}
foreach $data (@kiji_datas) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act,$pwd,$rhost,$ipad,$comment) = ÷_data($data);
$no = int($no);
print<<"_EOF_";
</PRE>
<A NAME="$no">
<CENTER><P>
<HR width=80\% color=ffcc00><P>
<A HREF="flashbbs.cgi?id=$ID&md=viw&no=$no&tn=$FORM{'tn'}">回应文章</A>|<A HREF="#list">最上面</A>
<TABLE WIDTH=90%><TR><TD WIDTH=10% ALIGN="center">
<B>[$no]</B>
</TD><TD WIDTH=10%>
_EOF_
if ($res eq 'root') {
print" <TT>[Root]</TT>\n";
} else {
$res = int($res);
print"[<A HREF=\"#$res\">▲</A><FONT COLOR=\"$em_color\"><TT>$res</TT></FONT>]\n";
}
print"</TD><TD>\n";
if (!$reply[$no]) {
print"[完]\n";
} else {
chop($reply[$no]);
local(@replys) = split(/-/,$reply[$no]);
foreach (@replys) {
print"[<A HREF=\"#$_\"> </A><FONT COLOR=\"$em_color\"><TT>$_</TT></FONT>]\n";
}
}
print"</TD></TR><TR><TD COLSPAN=3>\n";
&kiji_view($data);
print<<"_EOF_";
</TD></TR></TABLE>
</CENTER>
_EOF_
}
}
# [ 最新记事一括机能 ]
sub number {
&html_header("最新文章");
print<<"_EOF_";
<HR width=80\% color=ffcc00>
<CENTER>
最新文章<FONT COLOR="red"><B>$new_kiji</B></FONT>则显示。
</CENTER>
_EOF_
$count = (&read_file($countfile))[0];
foreach (@logs) {
@datas = ÷_log($_);
foreach $data (@datas) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act) = ÷_data($data);
if ($no > $count - $new_kiji) { push(@nums,$data); }
}
}
@nums = reverse(sort(@nums));
foreach $data (@nums) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act,$pwd,$rhost,$ipad,$comment) = ÷_data($data);
print<<"_EOF_";
<CENTER><P>
<HR width=80\% color=ffcc00><P>
<A HREF="flashbbs.cgi?id=$ID&md=viw&no=$no&tn=$tn">回应文章</A>|<A HREF="flashbbs.cgi?id=$ID&md=set&tn=$tn">全部表示</A>
<TABLE WIDTH=95%><TR><TD WIDTH=10% ALIGN="center">
_EOF_
&kiji_view($data);
print<<"_EOF_";
</TD></TR></TABLE>
</CENTER>
_EOF_
}
}
# [ 投稿表示 ]
sub html_form {
local($no,$title,$comment,$tn,$lx) = (@_);
if ($no eq '') { $no = 'root'; }
$nam_wid = 35;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -