#! /usr/local/bin/perl ############################################## #BooWordsSearch v1.11 / this program is free.# #(C) BooBooClub 1999-2007 # ############################################## #set data $sdfile = './searchdir.dat'; $found = './found.html'; $head = '検索結果
'; $view = 'title'; $sepa = ' '; $log = 'off'; $logfile = './log.dat'; $logmax = '500'; #read lib_etc; require './jcode.pl'; use Cwd; $cdir = cwd(); $| = 1; #read if ($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else{ $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/\cM\n//g; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\r\n|[\r\n]/$sepa/g; if($log eq 'on'){ $svalue = $value; &jcode'convert(*svalue,'sjis'); $SFORM{$name} = $svalue; } &jcode'convert(*value,'euc'); $FORM{$name} = $value; } #log if($log eq 'on'){ $wrt = $SFORM{'sw'}."\n"; open (LOG,"$logfile"); @logdata = ; close (LOG); push(@logdata,$wrt); $logcnt = @logdata; if($logcnt > $logmax){ @newlog = @logdata[($logcnt-$logmax)..$#logdata]; } else{ @newlog = @logdata; } open (LOG,">$logfile"); print LOG @newlog; close (LOG); } #search open (SDFILE,"$sdfile"); @sdfile = ; close (SDFILE); @dsw = split(/\Q$sepa\E/,$FORM{'sw'}); foreach $dsw(@dsw){ $dsw =~ s/^\s//; $dsw =~ s/\s$//; push (@sw,$dsw); } $hw = @sw; open (FHTML,"$found"); @fhtml = ; close (FHTML); &jcode'convert(*head,'sjis'); $w = $FORM{'sw'}; &jcode'convert(*w,'sjis'); print "Content-type: text/html\n\n"; foreach $fhtml(@fhtml){ if($fhtml =~ //){ &jcode'convert(*fhtml,'sjis'); print $fhtml; print "
\n"; print "$head"."\n"; print '(キーワード"'."$w".'"を含むページの検索)
'."\n"; print "

\n"; $cp = 0; foreach $sdfile(@sdfile){ chomp $sdfile; ($sdir,$surl,$ftype) = split(/,/,$sdfile); unless($surl =~ /\/$/){ $surl = "$surl".'/'; } chdir $cdir; chdir $sdir; &sdir('.'); } if($cp == 0){ print '
当該文字を含むページはありませんでした。
'; } print "
\n"; print "ヒット ".$cp."件"; print "
\n"; } else{ &jcode'convert(*fhtml,'sjis'); print "$fhtml"; } } sub sdir{ local($dir,$nlink) = @_; local($dev,$ino,$mode,$subcount); unless($nlink){ ($dev,$ino,$mode,$nlink) = stat('.'); } opendir(DIR,'.'); local(@files) = readdir(DIR); closedir(DIR); if($nlink == 2){ foreach $file(@files){ if($file eq '.' || $file eq '..'){ next; } &act; } } else{ $subcount = $nlink - 2; foreach $file(@files){ if($file eq '.' || $file eq '..'){ next; } &act; if($subcount == 0){ next; } ($dev,$ino,$mode,$nlink) = lstat($file); unless(-d $file){ next; } chdir $file; &sdir($name,$nlink); chdir '..'; $subcount--; } } } sub act{ $name = "$dir/$file"; @temp = split(/\./,$file); $tftype = $temp[$#temp]; if(-d $file || $ftype !~ /$tftype/){ return; } open (HTML,"$file"); $html = join('',); close (HTML); $html =~ m/([\w\W]*?)<\/title>/i; $pagetitle = $1; $pagetitle =~ s/[\r\n]//g; $html =~ s/[\r\n]/ /g; $html =~ s/<[\w\W]*?>//g; &jcode'convert(*html,'euc'); if($hw == 1){ if((!$FORM{'d'} && $html =~ /\Q$FORM{'sw'}\E/i)||($FORM{'d'} && $html =~ /\Q$FORM{'sw'}\E/)){ &found; } } else{ $cs = 0; foreach $sw(@sw){ if((!$FORM{'d'} && $html =~ /\Q$sw\E/i)||($FORM{'d'} && $html =~ /\Q$sw\E/)){ $cs++; } } if(($FORM{'t'} eq 'a' && $hw == $cs) || ($FORM{'t'} eq 'o' && $cs != 0)){ &found; } } } sub found{ $url = $name; $url =~ s/^\.\///; $lurl = "$surl"."$url"; $lurl =~ s/\/+/\//g; $lurl =~ s/^http:\/+/http:\/\//g; if($view eq 'title'){ $vtxt = ''; &jcode'convert(*pagetitle,'sjis'); $vtxt = $pagetitle; if($vtxt eq ''){ $vtxt = 'NoTitle'; } } else{ $vtxt = "$surl"."$url"; } &jcode'convert(*vtxt,'sjis'); print '<a href="'."$lurl".'">'."$vtxt".'</a>'."<br>\n"; $cp++; } exit 0;