#!/usr/local/bin/perl #####################たいやきライト過去ログ付きi-mode用CGI############# # # 構成(数字はパーミッション()内は所有者権限でCGIが動くサーバの場合) #|-- tl11i.cgi 755(700) #|-- jcode.pl 644(600) #|-- bbs.dat 666(600) #|-- count.txt 666(600) # #たいやきライトはシンプルな機能の一行掲示板です。 #使用、改造、再配布に一切の制限はありません。 #08/28 2001 真辺慎 ############################### 環境設定 ############################### $title = 'まなべの日記帳待避'; # 掲示板の名前 $bbsurl = 'tl11i.cgi'; # このスクリプトのURL(相対指定も可) $bbsfile = 'bbs.dat'; # 記録ファイルのパス $counterfile = 'count.txt'; # カウンタファイルのパス $jcpl = 'jcode.pl'; # 日本語コード変換ライブラリのパス $logdir = 'log/'; # 過去ログ保存ディレクトリ # 出力HTMLの文字色や背景(ボディタグ) $body = ''; $namecolor = '#1775a2'; # 名前の色 $textcolor = '#555555'; # 内容の色 $datecolor = '#666666'; # 投稿日時の色 $def0 = 10; # デフォルト表示件数 $max = 50; # 最大保存数 $maxlength = 3*1024; # 入力データ合計の最大値(byte) $time_dif = 9*60*60; # グリニッジ標準時との時差(日本時間を表示する場合9*60*60) ############################### 全体処理 ############################### &get_time; if ($ENV{'REQUEST_METHOD'} eq "POST") { &decode; &write if($FORM{'value'}); } &html; exit; ############################### サブルーチン ############################### sub get_time{ #-------------------- 時刻処理 --------------------# $time = time; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time + $time_dif); $year += 1900; $mon++; $wday = ('日','月','火','水','木','金','土')[$wday]; foreach($mon,$mday,$hour,$sec,$min){$_ = sprintf("%02d",$_);} $date_now = "$mon/$mday($wday)$hour:$min"; } sub decode{ #-------------------- デコード --------------------# return if($ENV{'CONTENT_LENGTH'} > $maxlength); require "$jcpl"; read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); foreach (split(/&/,$buf)) { ($name, $value) = split(/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/\r|\n//g; $value =~ s/&/&\;/g; $value =~ s//>/g; $value =~ s/\t:/ :/g; $FORM{$name} = $value; } } sub html{ #-------------------- HTML出力 --------------------# &counter; # HTML内の任意の場所に$countを置くとそこにカウント数が表示されます print "Content-type: text/html; charset=Shift_JIS\n\n"; print <<"_HTML_"; $title $title ログ ♪$count
name
message a_link

_HTML_ if($FORM{'def'}){ $def = $FORM{'def'}; $def = $max if($def > $max); } else{ $def = $def0; } open(IN,"$bbsfile"); @data = ; close(IN); $total = @data; $page = $FORM{'page'} || 0; $page_end = $page + $def; $page_end = $total if($page_end > $total); # 記事の出力 foreach (@data[$page .. $page_end - 1]) { ($date,$name,$value) = split(/\t:/,$_); print "[$name] "; print "$value $date

\n"; } $page++; if($page_end < $total){ print <<"_HTML_";

$page-$page_end (all=$total)
_HTML_ } else{ print "$page-$total (last)\n"; } print ""; } # html end sub write{ #-------------------- 書き込み処理 --------------------# return if($ENV{'HTTP_REFERER'} !~ /$bbsurl/i); if($FORM{'auto_link'}){ $FORM{'value'} =~ s/(http:\/\/)/\t:$1/g; # 連続してURLを貼った場合の処理(\t:で区切る) $FORM{'value'} =~ s/http:\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/♪<\/a>/g; $FORM{'value'} =~ s/\t://g; # \t:を元に戻す } open(IN,"$bbsfile"); chomp(@lines=); close(IN); splice(@lines,$max-1) if($max <= @lines); open(OUT,">$bbsfile"); print OUT "$date_now\t:$FORM{'name'}\t:$FORM{'value'}\n"; foreach(@lines){print OUT "$_\n";} close(OUT); # 過去ログ記録 $logfile = "$logdir$year$mon$mday.html"; if(!(-e "$logfile")){ open(LOG,">$logfile"); print LOG <<_LOG_; $tile$year年$mon/$mday($wday)過去ログ $body $tile$year年$mon/$mday($wday)過去ログ   掲示板にもどる _LOG_ } open(LOG,">>$logfile"); print LOG "
$FORM{'name'} >\; "; print LOG "$FORM{'value'} $date_now\n"; close(LOG); } sub counter{ #-------------------- アクセスカウンタ --------------------# open(IN,"$counterfile"); $count = ; close(IN); $count++; open(OUT,">$counterfile"); print OUT "$count"; close(OUT); }