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

📄 search.cgi

📁 一个linux论坛
💻 CGI
📖 第 1 页 / 共 3 页
字号:
#!/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>
&nbsp;&nbsp;<img src="$imagesurl/images/closedfold.gif" border=0> <a href="leoboard.cgi">$boardname</a><br>
&nbsp;&nbsp;<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 + -