当サイトはQ&A掲示板(コミュニティ)の窓口を共有して下さるサイト様を募集しています。
[Q&A掲示板] 共有サイト様募集!#!/usr/bin/perl @SEARCH = ('html', 'htm', 'shtml'); if($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } @args = split(/&/, $query); foreach $i (@args) { ($name, $val) = split(/=/, $i); $name =~ tr/+/ /; $name =~ s/%([0-9a-fA-F]{2})/pack('C', hex($1))/eg; $val =~ tr/+/ /; $val =~ s/%([0-9a-fA-F]{2})/pack('C', hex($1))/eg; $in{$name} = $val; } $in{'word'} =~ s/ / /g; @word = split(/ /, $in{'word'}); # ページの表示 if($in{'url'}) { # もしページが見つからなければエラーで終了 unless(-e $in{'url'}) { print "Content-ype: text/html\n\n"; print "エラー!:ファイルが存在しません!\n"; exit; } # ファイルの読み出し open(DATA, "< $in{'url'}"); @line = <DATA>; close(DATA); # 出力 print "Content-type: text/html\n\n"; foreach $l (@line) { # 検索ワードと一致した文字列を目立つように変換 foreach $w (@word) { # タグ内部にあるワードは退避 $l =~ s/(<[^>]+?)($w)([^<]+?>)/$1# 退避 #$3/gi; # ワードにタグを付けて修飾 $l =~ s/$w/<u><b>$w<\/b><\/u>/gi; # 退避したワードの復帰 $l =~ s/# 退避 #/$2/gi; } # BODYタグの終わりにオリジナルのファイルへのリンクを貼る $l =~ s/<\/body>/<center><a href="$in{'url'}">オリジナルファイルへ<\/a><\/center>\n<\/body>/i; print $l; } exit; } unless($in{'word'}) { print "Content-type: text/html\n\n"; print "検索ワードを入力してください!\n"; exit; } opendir(DIR, "./"); while($file = readdir(DIR)) { my($f) = 0; foreach(@SEARCH) { $f = 1 if($file =~ /$_$/); } next unless($f); $f = 0; open(DATA, "< $file"); my(@line) = <DATA>; close(DATA); undef(%tmp); foreach $w (@word) { foreach $l (@line) { $rank{$file} += $l =~ s/$w/$w/gi; if($l =~ /<title>(.+)<\/title>/i) { $title{$file} = $1; } if(!exists($tmp{$w}) && $l =~ /$w/i) { $tmp{$w} = 1; $f++; } } } unless($title{$file}) { $title{$file} = 'タイトルなし'; } if($f == @word) { push(@url, $file); } } closedir(DIR); $n = @url; print "Content-type: text/html\n\n"; if($n) { foreach(sort { $rank{$b} <=> $rank{$a} } @url) { # URLのエンコード $url = $_; $url =~ s/\%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; # ワードのエンコード $in{'word'} =~ s/\%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; print "・ <a href=\"test.cgi?url=$url&word=$in{'word'}\">$title{$_}</a> 信用度($rank{$_})\n<br>"; } } else { print "一致するワードはありませんでした。\n"; }
$f = 0; foreach(@SEARCH) { $f = 1 if($in{'url'} =~ /$_$/); } unless($f) { print "Content-type: text/html\n\n"; print "不正行為!そのファイルへのアクセスは認められません!\n"; exit; }