📄 search.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;
use File::Copy;
$LBCGI::POST_MAX=10000;
$LBCGI::DISABLE_UPLOADS = 1;
$LBCGI::HEADERS_ONCE = 1;
require "data/boardinfo.cgi";
require "data/styles.cgi";
require "lb.lib.pl";
$|++;
$thisprog = "search.cgi";
$query = new LBCGI;
for ('TYPE_OF_SEARCH','NAME_SEARCH','POST_SEARCH','FORUMS_TO_SEARCH','action', 'forum', 'SEARCH_STRING',
'REFINE_SEARCH','CUR_TIME','nextforum', 'start','JH_SEARCH','CAT_TO_SEARCH','SEARCH_DAY','SEARCH_TIME') {
next unless defined $_;
next if $_ eq 'SEND_MAIL';
$tp = $query->param($_);
$tp = &unHTML("$tp");
${$_} = $tp;
}
&error("打开文件&老大,别乱黑我的程序呀!") if (($forum) && ($forum !~ /^[0-9]+$/));
&error("打开文件&老大,别乱黑我的程序呀!") if (($CUR_TIME) && ($CUR_TIME !~ /^[0-9]+$/));
$SEARCH_STRING =~ s/^system //g;
$SEARCH_STRING = &stripMETA($SEARCH_STRING);
$ipaddress = $ENV{'REMOTE_ADDR'};
if (! $inmembername) { $inmembername = $query->cookie("amembernamecookie"); }
if (! $inpassword) { $inpassword = $query->cookie("apasswordcookie"); }
$inmembername =~ s/[\a\f\n\e\0\r\t\`\~\!\@\#\$\%\^\&\*\(\)\+\=\\\{\}\;\'\:\"\,\.\/\<\>\?]//isg;
$inpassword =~ s/[\a\f\n\e\0\r\t\|\@\;\#\{\}\$]//isg;
if ((!$inmembername) or ($inmembername eq "客人")) {
$inmembername = "客人";
$filename = "客人$ipaddress";
$filename =~ s/\.//g;
}
else {
&getmember("$inmembername");
&error("普通错误&密码与用户名不相符,请重新登录!") if ($inpassword ne $password);
if ($userregistered eq "no") { &error("论坛搜索&你还没注册呢!"); }
$filename = $inmembername;
}
if (($searchopen ne "")&&($searchopen ne "0")) {
if (($membercode ne "ad")&&($membercode ne "smo")&&($membercode ne "cmo")&&($membercode ne "mo")){
if ($membercode eq "masked") {&error("搜索&搜索功能只允许普通会员使用"); }
if (($searchopen eq 1)&&($inmembername eq "客人")) {&error("搜索&搜索功能只允许注册会员使用,请注册!"); }
if ($searchopen eq 2) {if ($membercode ne "rz") {&error("搜索&搜索功能只允许认证会员或以上级别使用!");}}
if ($searchopen eq 3) {&error("搜索&搜索功能只允许版主或以上级别使用!");}
}
}
$filename =~ y/ /_/;
$filename =~ tr/A-Z/a-z/;
$savefilename = "$lbdir" . "search/$filename\_sav.cgi";
$searchfilename = "$lbdir" . "search/$filename\_sch.cgi";
print header(-charset=>gb2312);
&title;
$output .= qq~<p><table cellpadding=0 cellspacing=0 border=0 width=$tablewidth align=center>
<tr><td width=30% rowspan=2 valign=top><img src="$imagesurl/myimages/$boardlogo" border=0></td>
<td valign=top align=left><font face="$font" color=$fontcolormisc>
<img src="$imagesurl/images/closedfold.gif" border=0> <a href="leoboard.cgi">$boardname</a><br>
<img src="$imagesurl/images/bar.gif" border=0><img src="$imagesurl/images/openfold.gif" border=0> 贴子搜索
</td></tr></table><p>
<table cellpadding=0 cellspacing=0 border=0 width=$tablewidth bgcolor=$tablebordercolor align=center>
<tr><td>
<table cellpadding=8 cellspacing=1 border=0 width=100%>
~;
if ($action eq "") {
&ipbanned; #封杀一些 ip
my $filetoopens = "$lbdir" . "data/onlinedata.cgi";
$filetoopens = &lockfilename($filetoopens);
if (!(-e "$filetoopens.lck")) {
&whosonline("$inmembername\t搜索\tnone\t搜索符合要求的贴子\t");
}
opendir(DIR, "${lbdir}search");
my @dirdata = readdir(DIR);
closedir(DIR);
@dirdata = grep(/\_sch.cgi$/,@dirdata);
foreach (@dirdata){
if ((stat("${lbdir}search/$_"))[9] < (time - 30*60)) {
unlink("${lbdir}search/$_");
}
}
}
if ($action eq "saveresults") {
if ($inmembername eq "客人") { &error("保存搜索结果&客人不能保存搜索结果!"); }
$filename = $inmembername;
$filename =~ y/ /_/;
$filename =~ tr/A-Z/a-z/;
copy ("${lbdir}search/$filename\_sch.cgi","${lbdir}search/$filename\_sav.cgi");
$output .= qq~<tr><td bgcolor=$miscbacktwo align=center><font color=$fontcolormisc><b>搜索结果保存成功</b></font></td></tr>
<tr><td bgcolor=$miscbackone><font color=$fontcolormisc>具体情况:
<ul><li><a href="$boardurl/$thisprog?action=display">返回当前搜索结果</a>
<li><a href="forums.cgi?forum=$inforum">返回论坛</a>
<li><a href="leoboard.cgi">返回论坛首页</a>
</ul></td></tr></table></td></tr></table>
<meta http-equiv="refresh" content="2; url=$thisprog?action=display">
~;
&output( -Title => "$boardname - 贴子搜索", -ToPrint => "$output", -Version => $versionnumber );
}
elsif ($action eq "loadresults") {
if ($inmembername eq "客人") { &error("调入搜索结果&客人无法调入搜索结果!"); }
$filename = $inmembername;
$filename =~ y/ /_/;
$filename =~ tr/A-Z/a-z/;
$savefilename = "${lbdir}search/$filename\_sav.cgi";
open (READ, "$savefilename") or &error("调入搜索结果&你还没有保存过搜索结果!");
copy ("${lbdir}search/$filename\_sav.cgi","${lbdir}search/$filename\_sch.cgi") if (!-e "${lbdir}search/$filename_sch.cgi");
$output.=qq~<meta http-equiv="refresh" content="0; url=$thisprog?action=display">~;
}
elsif ($action eq "startsearch") {
$SEARCH_STRING =~ s/\, /\,/g;
if($CAT_TO_SEARCH eq "all"){
@FORUMS_TO_SEARCH=("all");
}elsif($CAT_TO_SEARCH =~/^cat[0-9]+$/){
$filetoopen = "$lbdir" . "data/allforums.cgi";
&winlock($filetoopen) if (($OS_USED eq "Nt")||($OS_USED eq "Unix"));
open(FILE, "$filetoopen");
flock(FILE, 1) if ($OS_USED eq "Unix");
@forums = <FILE>;
close(FILE);
&winunlock($filetoopen) if (($OS_USED eq "Nt")||($OS_USED eq "Unix"));
@FORUMS_TO_SEARCH=();$CAT_TO_SEARCH=~s/^cat//;
foreach(@forums){
chomp $_;
@getforum=split(/\t/,$_);
push(@FORUMS_TO_SEARCH,$getforum[0]) if($getforum[2] eq $CAT_TO_SEARCH);
}
}else{
@FORUMS_TO_SEARCH = $query->param("FORUMS_TO_SEARCH");
$FORUMS_TO_SEARCH = @FORUMS_TO_SEARCH;
&error("搜索&请至少选择一个要搜索的论坛!") if ($FORUMS_TO_SEARCH <= 0);
}
&error("搜索&请至少输入一个关键字!") if ($SEARCH_STRING eq "");
if ($TYPE_OF_SEARCH eq "username_search") {
$REFINE_SEARCH = "$NAME_SEARCH";
}
else {
$REFINE_SEARCH = "$POST_SEARCH";
}
$SEARCH_DAY=($SEARCH_DAY != 1 && $SEARCH_DAY != 7 && $SEARCH_DAY != 14 && $SEARCH_DAY != 30 && $SEARCH_DAY != 60 && $SEARCH_DAY != 90 && $SEARCH_DAY != 180 && $SEARCH_DAY != 365)?"any":$SEARCH_DAY;
$SEARCH_TIME=($SEARCH_TIME eq "b")?"b":"f";
open (SEARCH, ">$searchfilename");
print SEARCH "$CUR_TIME\n";
print SEARCH "$SEARCH_STRING\n";
print SEARCH "$TYPE_OF_SEARCH,$SEARCH_DAY,$SEARCH_TIME\n";
print SEARCH "$REFINE_SEARCH\n";
print SEARCH "@FORUMS_TO_SEARCH,$JH_SEARCH\n";
close (SEARCH);
$relocurl = "$thisprog?action=continue";
$output .= qq~<tr>
<td bgcolor=$miscbacktwo valign=middle align=center><font face="$font" color=$fontcolormisc><b>搜索中....</b></font></td></tr>
<tr><td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc>
请等待程序完成搜索。<br>
<b>当前搜索情况:</b>
<ul>
<li>搜索情况....
</ul>
</tr></td></table></td></tr></table>
<meta http-equiv="refresh" content="1; url=$relocurl">
~;
}
elsif ($action eq "display") {
&displayresults;
}
elsif ($action eq "continue") {
open (INSEARCH, "$searchfilename");
@searchparam = <INSEARCH>;
close (INSEARCH);
my $SEARCH_STRING = $searchparam[1];
chomp $SEARCH_STRING;
(my $TYPE_OF_SEARCH,my $DAY_TO_SEARCH,my $TIME_TO_SEARCH) = split(/\,/,$searchparam[2]);
chomp ($TYPE_OF_SEARCH,$DAY_TO_SEARCH,$TIME_TO_SEARCH);
my $REFINE_SEARCH = $searchparam[3];
chomp $REFINE_SEARCH;
chomp $searchparam[4];
(my $FORUMS_TO_SEARCH,my $JH_SEARCH)=split(/\,/,$searchparam[4]);
@FORUMS_TO_SEARCH=split(/\s/,$FORUMS_TO_SEARCH);
@KEYWORDS = split(/\,/,$SEARCH_STRING);
$filetoopen = "$lbdir" . "data/allforums.cgi";
&winlock($filetoopen) if (($OS_USED eq "Nt")||($OS_USED eq "Unix"));
open(FILE, "$filetoopen");
flock(FILE, 1) if ($OS_USED eq "Unix");
@forums = <FILE>;
close(FILE);
&winunlock($filetoopen) if (($OS_USED eq "Nt")||($OS_USED eq "Unix"));
@checkforums = @forums;
@checkforums = reverse(@checkforums);
$search_in_forum = $FORUMS_TO_SEARCH;
if ($FORUMS_TO_SEARCH eq "all") {
@search_in_forum =split(/\t/,$forums[$nextforum]);
$search_in_forum = $search_in_forum[0];
$checkforums = @forums;
$nextforum++;
if ($nextforum >= $checkforums) { $FORUMS_TO_SEARCH = "done"; }
}elsif($FORUMS_TO_SEARCH =~m/\s/isg){
$search_in_forum = $FORUMS_TO_SEARCH[$nextforum];
@checkforums = @FORUMS_TO_SEARCH;
@checkforums = reverse(@checkforums);
$checkforums = @checkforums;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -