#!/usr/local/bin/perl #たいやきライトはシンプルな機能の一行掲示板です。 #使用、改造、再配布に一切の制限はありません。 #投稿コードルーチンは孤島の遺跡(http://www.synapse.ne.jp/~pato/kojo/) #を参考に簡略化したものを使用しています。 #07/05 2000 真辺慎 ############################### 環境設定 ############################### $title = '★★東風荘革命軍作戦室★★'; # 掲示板の名前 $bbsurl = './tl11p.cgi'; # このスクリプトのURL(相対指定も可) $bbsfile = './bbs.dat'; # 記録ファイルのパス $counterfile = './count.txt'; # カウンタファイルのパス $jcpl = './jcode.pl'; # 日本語コード変換ライブラリのパス # 出力HTMLの文字色や背景(ボディタグ) $body = ''; $namecolor = '#d53d8e'; # 名前の色 $textcolor = '#333333'; # 内容の色 $datecolor = '#666666'; # 投稿日時の色 $max = 100; # 表示件数 $maxlength = 3*1024; # 入力データ合計の最大値(byte) $code1 = 12345678; # 投稿コード1 (8桁の数値、要変更) $code2 = 56; # 投稿コード2 (2桁の数値、要変更) $ltime = 3*60*60; # 最長投稿間隔(sec、これより長い時間が経過した場合は書き込み不可) $stime = 0; # 最短投稿間隔(sec、これより短い間隔の書き込み不可) $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; # $timeは投稿コード作成にも使用するので省略不可 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time + $time_dif); $mon++; $wday = ('日','月','火','水','木','金','土')[$wday]; $date_now = sprintf( "%02d/%02d($wday)%02d:%02d",$mon,$mday,$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を置くとそこにカウント数が表示されます # 投稿コード生成 $code = ($time+$code1)*$code2; print "Content-type: text/html\n\n"; print <<"_HTML_"; $title $body $title   | 第弐作戦室 | 代参作戦室 | 司令室 | 東風荘 | 革命軍 |  ♪$count
名前 自動リンク
内容
発言

_HTML_ # 記事の出力 open(IN,"$bbsfile"); while () { ($date,$name,$value,$pcode) = split(/\t:/,$_); print "


$name >\; "; print "$value $date\n"; } close(IN); print <<"_HTML_";
たいやきライト1.1p source
_HTML_ } sub write{ #-------------------- 書き込み処理 --------------------# open(IN,"$bbsfile"); @data = ; close(IN); foreach(@data){ $code0 = (split(/\t:/,$_))[3]; chomp $code0; if($code0 == $FORM{'code'}){&error('その投稿コードは使用済みです。');} } # 投稿コード復元 $de_code = ($FORM{'code'}/$code2)-$code1; if($time <= $de_code){ &error('投稿コードが壊れています。掲示板をリロードして下さい。'); } elsif($time - $de_code > $ltime){&error("投稿コードの有効期限($ltime秒)が過ぎています。掲\示板をリロードして下さい。");} elsif($time - $de_code < $stime){&error("投稿間隔が短かすぎます。$stime秒以上経過してから投稿して下さい。");} 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:を元に戻す } splice(@data,$max-1) if($max <= @data); open(OUT,">$bbsfile"); print OUT "$date_now\t:$FORM{'name'}\t:$FORM{'value'}\t:$FORM{'code'}\n"; foreach(@data){ print OUT $_; } close(OUT); } sub error{ #-------------------- エラー処理 --------------------# $error_msg = $_[0]; print "Content-type: text/plain\n\n"; print "Error(T-T):$error_msg\n\n"; print "--たいやきライト1.1p--\n\n\n\n"; exit; } sub counter{ #-------------------- アクセスカウンタ --------------------# open(IN,"$counterfile"); $count = ; close(IN); $count++; open(OUT,">$counterfile"); print OUT "$count"; close(OUT); }