#!/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 $body

$title  掲示板に戻る 


_HTML_ $i = ''; foreach $log (@logs){ # 過去ログファイルリストを出力 $c = ''; $count = 0; open(IN,"$logdir$log"); while(){ $count++ if(/
/); } close(IN); $size = (stat("$logdir$log"))[7]; $logyear = substr("$log",0,4); $logmon = substr("$log",4,2); $logname = "$logyear年$logmon月"; if($i == $#logs){ $c = ' checked'; } printf( " $logname %6s byte $count件\n",$size); $i++; } print <<"_HTML_";
日付: 日から 日まで $imginfo

検索:


_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(/
/,$art); $art = ''; shift(@arts); $logyear = substr("$FORM{'data'}",0,4); $logmon = substr("$FORM{'data'}",4,2); $title = "$title $logyear年$logmon月$FORM{'start'}日〜$logmon月$FORM{'end'}日"; print "Content-type: text/html; charset=Shift_JIS\n\n"; print <<"_HTML_"; $title $body

$title  ログ選択画面に戻る  掲示板に戻る 

_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]*>$keyword$_"; $hit++; } if($FORM{'keyword'} && $hit){ print "


「$FORM{'keyword'}」は$hit件みつかりました\n"; } elsif($FORM{'keyword'}){ print "
「$FORM{'keyword'}」はみつかりませんでした\n"; } &footer; } # html end ################################## # 配布元表示とHTMLの閉じタグ ################################## sub footer{ print <<"_HTML_";
Monthly Getlog for あやしいわーるど@じょしあな + TeamMIZUIRO v2.0
_HTML_ } # footer end ################################## # エラー処理 ################################## sub error{ if($_[0] eq '0'){$msg = '記録ファイルのオープンに失敗しました。';} else{ $msg = $_[0]; } print "Content-type: text/html\n\n"; print <<"_HTML_"; ERROR(T_T) $body

ERROR(T_T)

$msg


_HTML_ &footer; exit; } # error end # end_of_script