#!/usr/bin/perl
;# ↑このパスはプロバイダによって違うので調べて設定する
;# (これはこのスクリプトの最初の1行になければならず、それより上に空行があってもいけません。)
;# (この設定が必要ないサーバもあります。一般的な場合を想定して解説を入れています。)
;# (他に、プロバイダからアナウンスされている情報を十分理解しておいてください。)
;#
;# 簡易BBS version 9.03(フリーソフト)
;#
;# Script written by Kazu.Y
;# Created on: 02/05/96
;# I can be reached at: rescue@ask.ne.jp
;# Scripts Found at: http://www.rescue.ne.jp/
# [History]
# v8.90 11/AUG/98 v8.8にロック機能を付加
# v9.00 12/AUG/98 タグ処理を制限してセキュリティアップ
# v9.01 24/AUG/98 未入力処理(クッキー消去)時にリストされな不具合を修正
# v9.02 03/SEP/98 改行の扱いを3種類に変更
# v9.03 18/SEP/98 Eメール自動リンクの廃止
###########################################################################################
#
# ■重要! v9シリーズはそれ以前のヴァージョンとデータの互換性がありません。
#
# 基本構成
#
# /public_html/(ホームページディレクトリ)
# |
# |-- /cgi-bin/(任意のディレクトリ)
# |
# |-- jcode.pl (755)
# |-- minibbs.cgi (755)
# |
# |-- /data/ (777)
# |
# |-- minibbs.dat (666)
#
# ・minibbs.dat は中身が空っぽのファイルをパソコン上で作成して転送する
# ・( )内はパーミッッション値
#
###########################################################################################
#----------------#
# 初期設定 #
#----------------#
#--- 必ずあなたの環境に合わせて書き替える項目 --------------------------------------------#
#◆掲示板の名前
# ''内に記述しますが、'を入れたい場合は '' を "" に替えてください.
# ただしその場合、文字によって化けが生じることがあります.
# 詳しくは当サイトのFAQを参照してください.
$title = '西島三重子ファンクラブ「風」掲示板';
#◆このスクリプトをURLで設定
$reload = 'http://www.sasabe.com/MIE/BBS/minibbs.cgi';
#◆画面の「終了」リンク先をURLで設定
$modoru = 'http://www.sasabe.com/MIE/';
#--- 必要に応じて設定する項目 ------------------------------------------------------------#
#◆画面の色や背景の設定 (HTML書式)
$body = '
';
#◆タイトル背景とタイトル文字色の設定
$title_back = '#ff3333';
$title_str = '#ffffff';
#◆投稿毎に管理者へ内容をメールする
# メール機能は、いち早く不適切な投稿等をチェックすることができるように設計しました.
# メールしない場合は $mailto $sendmail を設定する必要はありません.
# 投稿者がEメールを記入している場合は、返信アドレスにそのEメールが記載されます.
# メールする:1 しない:0
$s_mail = 1;
$mailto = 'miichan@sasabe.com'; # 送信先Eメール
$sendmail = '/usr/sbin/sendmail'; # 送信スクリプト(sendmail) プロバイダに聞くこと
#◆画面内に記述する文字列等 (HTML書式)
# ''内に記述しますが、'を入れたい場合は '' を "" に替えてください.
# ただしその場合、文字によって化けが生じることがあります.
# 詳しくは当サイトのFAQを参照してください.
# 必要ない場合は '' 内に何も書きません.
#◇タイトルの下位置に表示する文字列
$msg_top1 = 'ここは、西島三重子さんのファンのための掲示板です。自由に書き込んで下さい。';
$msg_top2 = '';
$msg_top3 = '';
#◇投稿フォームの下位置に表示する文字列
$msg_mid1 = '■投稿時には、この記事を削除する時に利用する削除キーを設定してください.
';
$msg_mid2 = '■一度設定して投稿すれば一定期間同じ削除キーが保存されます.
';
$msg_mid3 = '■入力欄に記憶された内容を消去するには、[書き直し]→[書き込む]を順番に押します.';
#◇最下部に表示する文字列
$msg_btm1 = '■削除は、[削除]欄をチェックして、投稿時に設定した削除キーをすぐ上の欄に入力してボタンを押します.
';
$msg_btm2 = '■削除キーが合致しない記事は削除されません.
';
$msg_btm3 = '■削除キー欄にマスターキー(管理者のみ)を入力するとすべての記事の削除が可能です.';
#◆$reloadで設定した設置URL以外のフォームからの投稿を禁止する処置 する:1 しない:0
# 悪戯の防止用ですが、利用サーバやブラウザによっては正規投稿もできなくなる場合もあります.
$ref_axs = 1;
#◆1記事の最大記録サイズ(bytes) 0で無制限
$max_size = 0;
#◆1画面に表示する記事件数
$def = 20;
#◆書き込み件数の最大登録数の設定です。この件数を超えると、古いものから削除されていきます.
# ページ処理機能が付きましたので、この件数を大きくしても一度に表示される記事数は限定されます.
# 記録されたファイルの巨大化を防止する為に、ある程度の件数で自動削除されるようにします.
# サーバ負荷を考慮して、あまり大きくしないことが重要です.
$max = '100';
#◆日本語コード変換ライブラリ
# minibbs.cgiと同じ場所に設置する場合はこのままでよい.
require './jcode.pl';
#◆内容が書き込まれる記録ファイルの名前(パスの設定ではない!)
$file = 'minibbs.dat';
#◆データディレクトリのパスの設定(処理の都合上 / で閉じない)
$tmp_dir = './data';
#◆海外サーバ等で時差が生じる場合は修正します
# 海外時間に+9時間する場合 = localtime(time + 9*60*60);
# 海外時間に−9時間する場合 = localtime(time - 9*60*60);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time + 16*60*60);
#◆クッキーの消化設定
# 最終書き込みから 30日後 30*24*60*60
# 1日後 24*60*60
# 10時間後 10*60*60
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60);
#◆入力形式の設定 標準入力:1(post) その他:0(get)
# 投稿ボタンを押して Method not implemented.. 等というエラーが出る場合は get で試すこと
# getの場合は文字制限がありますので長い文章等は途中で切れる可能性があります.
# さらに、getの場合は不要な悪戯を受けてしまう環境になりますので、注意してください.
# POST:1 GET:0
$method = 1;
###########################################################################################
#
# ・記録ファイルには処理の都合上特殊コードが記録されますので、直接編集はできません。
# ・スクリプトの中身を書き替える場合は、perlやCGIやHTMLなどのそれなりの知識が必要です。
#
###########################################################################################
@wday_array = ('日','月','火','水','木','金','土');
$date_now = sprintf("%01d月%01d日(%s)%02d時%02d分",$mon +1,$mday,$wday_array[$wday],$hour,$min);
$date_num = sprintf("%02d%02d%02d%02d%02d",$mon +1,$mday,$hour,$min,$sec); # <-変更禁止
&lock0;
if ($method eq '1' && $ENV{'QUERY_STRING'} ne '') { &error('エラー','不正利用の可能性があります.'); }
if ($method eq '1') { $method = 'post'; read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); }
else { $method = 'get'; $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
@pairs = (grep(/^action=/,@pairs),grep(!/^action=/,@pairs));
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis');
if ($value =~ /(.*)\"\,\"(.*)/) { &error('記入ミス','記録できない文字の並び「","」があります.'); }
$value =~ s/</g; $value =~ s/>/>/g;
if ($s_mail && $name eq 'value') {
$mail_value = $value;
if ($mail_value =~ /\r\n/) { $mail_value =~ s/\r\n/\n/g; }
if ($mail_value =~ /\r/) { $mail_value =~ s/\r/\n/g; }
}
if ($FORM{'action'} eq 'regist') {
if ($value =~ /\r\n/) { $value =~ s/\r\n/\r/g; }
if ($value =~ /\n/) { $value =~ s/\n/\r/g; }
}
if ($name eq 'name' || $name eq 'email') { $value =~ s/\;//g; $value =~ s/\://g; $value =~ s/\,//g; }
if ($name eq 'target') { push(@RM,$value); }
else { $FORM{$name} = $value; }
}
if ($FORM{'action'} eq 'password') { &encode; }
$cookies = $ENV{'HTTP_COOKIE'};
@pairs = split(/;/,$cookies);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ s/ //g;
$DUMMY{$name} = $value;
}
@pairs = split(/,/,$DUMMY{$reload});
foreach $pair (@pairs) {
($name, $value) = split(/:/, $pair);
$COOKIE{$name} = $value;
}
if ($FORM{'admin'} eq 'change') { &password; exit; }
if ($FORM{'action'} eq 'remove') { &remove; }
elsif ($FORM{'action'} eq 'regist') { ®ist; }
if (!open(DB,"$tmp_dir\/$file")) { &error('設定ミス',"$file が設定された場所にありません."); }
@lines = ;
close(DB);
if (-z "$tmp_dir\/$file") { $first = 1; &password; exit; }
elsif (@lines[0] =~ /MiniBBSv8/) { &error('データエラー',"$file のデータ形式は簡易BBSv8シリーズのものと思われますので使えません."); }
elsif (!(@lines[0] =~ /MiniBBSv9/)) { &error('データエラー',"$file のデータはこの簡易BBSでは使えない構造である可能性があります."); }
&html;
exit;
sub html {
#--- 入力フォーム画面 --------------------------------#
print "Content-type: text/html\n\n";
print "$title\n";
print "$body\n";
print "$title
\n";
print "$msg_top1\n";
print "$msg_top2\n";
print "$msg_top3\n";
print "