#!/usr/local/bin/perl #Special thanks to はじあや@ふぁみーるのパソヲタさん&ログ商人さん♪ #このスクリプトはgetlog_m.cgiの機能を参考に作られています。 #html月単位保存形式のすべてのあやしい系BBSでそのまま使用可能(たぶん)。 ################################## # 環境設定 ################################## $cgiurl = './log.cgi'; #■このスクリプトのURL(相対指定も可) $logdir = './log/'; #■過去ログdirectoryのパス $bbsurl = './bbs.cgi'; #■掲示板本体のURL(相対指定も可) $jcpl = './jcode.pl'; #■日本語コード変換ライブラリのパス #■掲示板の名前 $title = '過去ログ'; #■出力HTMLのbodyタグ $body = '
'; #■検索キーワードの最大値(あまり大きくしないで下さい) $keywordmax = 40; #■グリニッジ標準時との時差(日本時間を表示する場合9*60*60) $time_dif = 9*60*60; #■使用するリクエストメソッド(GET or POST、GETにすると検索式付きのURLがブラウザに表示されます) $method = 'GET'; ################################## # 処理の流れ ################################## &decode; if($FORM{'mode'} eq 'view'){ &view; } else{ ⊤ } exit; #--------------------------------- ここから下はサブルーチン --------------------------------- ################################## # デコード ################################## sub decode{ if($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } elsif($ENV{'REQUEST_METHOD'} eq "GET"){ $buffer = $ENV{'QUERY_STRING'}; } require $jcpl; foreach (split(/&/,$buffer)) { ($name,$value) = split(/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $FORM{$name} = $value; } }# decode end ################################## # 過去ログ選択ページ ################################## sub top{ # 過去ログdirからリストを取得 opendir(LOG,$logdir) || error(0); @logs = sort {$a <=> $b} grep(/\.html$/,readdir(LOG)); close(LOG); print "Content-type: text/html; charset=Shift_JIS\n\n"; print <<"_HTML_";$title 掲示板に戻る
_HTML_ &footer; } # top end ################################## # 過去ログ表示 ################################## sub view{ if($FORM{'data'} !~ /^\d{6}\.html$/){&error(0);} if(length$FORM{'keyword'} > $keywordmax){&error("keywordは半角$keywordmax文字以内にしてください。");} # 過去ログファイルの読み込み $logfile = "$logdir$FORM{'data'}"; open(IN,"$logfile") || &error(0); read(IN,$art,(-s $logfile)); close(IN); @arts = split(/
_HTML_
# 過去ログ出力
foreach (@arts) {
$_ =~ /> 投稿日:[^<]*(\d{2}).?.?\(..\)/;
next if($1 < $FORM{'start'} || $1 > $FORM{'end'});
if($FORM{'keyword'}){
$keyword = quotemeta("$FORM{'keyword'}");
if($FORM{'search'} eq 'all'){
next if($_ !~ /$keyword/);
}
elsif($FORM{'search'} eq 'name'){
next if($_ !~ /投稿者:.*>$keyword);
}
elsif($FORM{'search'} eq 'subject'){
next if($_ !~ /]*>$keyword);
}
}
# アップロード画像の処理(じょしあな固有)
$_ =~ s/$_";
$hit++;
}
if($FORM{'keyword'} && $hit){
print " ERROR(T_T)
$msg
「$FORM{'keyword'}」は$hit件みつかりました\n";
}
elsif($FORM{'keyword'}){
print "
「$FORM{'keyword'}」はみつかりませんでした\n";
}
&footer;
} # html end
##################################
# 配布元表示とHTMLの閉じタグ
##################################
sub footer{
print <<"_HTML_";
_HTML_
&footer;
exit;
} # error end
# end_of_script