#! /usr/local/bin/perl
#
# ↑このパスはプロバイダによって違うので調べて設定します。
#
# 簡易BBS version 6.2(フリーソフト)
#
# Script written by Kazu.Y
# Created on: 96年5月2日
# Last Modified on: 97年3月29日
# I can be reached at: rescue@ask.or.jp
# Scripts Found at: http://www.ask.or.jp/~rescue/
#
# <利用規定の抜粋>
# 1.このスクリプトは自分で使うために承諾なしに自由に改造することができます。
# 2.改造の有無にかかわらず、このスクリプトを再配布することはできません。
#
# <準備>
# 1.この minibbs.pl は minibbs.cgi にファイル名を変更して、パーミッションを 755 に設定します。
# 2.このプログラムの他に minibbs.dat という中身の無いからっぽのファイルを用意して、パーミッションを 666 に設定します。
###########################################################################################
#
# 初期設定
#
# 日本語コード変換ライブラリ(v2.0)の指定
# (このCGIと同じディレクトリに設置する場合は、'./jcode.pl'でよい)
require './jcode.pl';
# 設置するURLを設定
$reload = 'http://www.efn.org/~gmine/minibbs.cgi';
# 内容が書き込まれる記録ファイルのパスを設定
# (このCGIと同じディレクトリに設置する場合は、'./minibbs.dat'でよい)
$file = './minibbs.dat';
# 削除モード移行パスワードの設定
$password = 'unchiko';
# 掲示板の名前
$title = 'ただの伝言板';
# 1ページに表示する件数
$def = 30;
# 書き込み件数の最大登録数の設定です。この件数を超えると、古いものから削除されていきます。
# ページ処理機能が付きましたので、この件数を大きくしても一度に表示される記事数は限定されます。
# 記録されたファイルの巨大化を防止する為に、ある程度の件数で自動削除されるようにします。
$max = '60';
# 海外サーバ等で時差が生じる場合は修正します
# 海外時間に+9時間する場合 = localtime(time + 9*60*60);
# 海外時間に−9時間する場合 = localtime(time - 9*60*60);
# (参考)timeには1970年からの秒数が入っています
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
# クッキーを格納する名前を設定する
# 複数の簡易BBSまたは他スクリプトで同じ名前のクッキーを使用すると弊害がある場合があります。
# 任意の英数字を設定します。
$cookie_name = 'user-00';
# クッキーの消化設定
# 最終書き込みから 30日後 30*24*60*60
# 1日後 24*60*60
# 10時間後 10*60*60
$ENV{'TZ'} = "GMT"; # 時刻取得を国際標準時とする
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = localtime(time + 30*24*60*60);
###########################################################################################
# 上記の$monには0から11までの数字が入るので修正処理
$month = ($mon + 1);
# 時刻を2桁に統一する処理
if ($month < 10) { $month = "0$month"; }
if ($mday < 10) { $mday = "0$mday"; }
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
# 曜日変換処理
# $wdayには0から6までの数字が入り曜日に対応している
$y0="日"; $y1="月"; $y2="火"; $y3="水"; $y4="木"; $y5="金"; $y6="土";
$youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6) [$wday];
# 時刻フォーマット
$date_now = "$month月$mday日($youbi)$hour時$min分$sec秒";
# フォーム入力されたデータを$bufferに格納する(getかpostかによって取得方法が異なる)
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
# $bufferに格納されたデータを解析し、パーツごとに分けるためのサブルーチンへ
&form;
# 全体の流れを決定する(actionやpwdはフォーム入力されたデータを格納する名前)
# action=remove かつ pwd=設定パスワード --> 削除処理して通常画面へ
# action=remove --> 削除記事選択画面へ
# action=regist --> 記事記録処理して通常画面へ
# その他 --> 通常画面へ
if ($FORM{'action'} eq 'remove' && $FORM{'pwd'} eq $password) { &remove2; &remove1; exit; }
elsif ($FORM{'pwd'} eq $password) { &remove1; exit; }
elsif ($FORM{'action'} eq 'regist') { ®ist; &html; }
elsif ($FORM{'page'} ne '') { &html; }
else { &html; }
sub html { # <通常画面を生成するサブルーチン>
# クッキーの取得(独自方式)
$cookies = $ENV{'HTTP_COOKIE'};
@pairs = split(/;/,$cookies);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ s/ //g;
$DUMMY{$name} = $value;
}
@pairs = split(/,/,$DUMMY{$cookie_name});
foreach $pair (@pairs) {
($name, $value) = split(/:/, $pair);
$COOKIE{$name} = $value;
}
# 記録ファイルを読み出しオープンして、配列<@lines>に格納する
if (!open(DB,"$file")) { &error(0); }
@lines = ' . "\n";
#
# 変数がある場合は、その変数を例のように囲む
# 例 print '最高' . $i . '件の記録ができます。 ' . "\n";
#
# または、""で囲ってもよいが、その中に""を入れる場合は、中に入る " の前に \ を入れる
# 例 print "最高$i件の記録ができます。こちらを読んでください。 \n";
#
# 文字化けについてはFAQを参照のこと
print ' ' . "\n";
# 投稿ボタンを押して Method not implemented.. というエラーが出る場合は post の代わりに get で試す
print ' ' . "\n";
$page_next = $page_end + 1;
$i = $page + 1; $j = $page_end + 1;
if ($page_end ne $accesses) {
print "$i番目から$j番目のメッセージ・イズ・ヒア。 \n";
print '
みんなのでででででんごんばん!
\n";
print 'これ以上のメッセージはないそうだ。' . "\n";
}
print '' . "\n";
# このスクリプトの著作権表示(かならず表示してください)
print 'MiniBBS v6.2 is Free.
' . "\n";
exit;
}
sub form {
# $bufferに格納されたFORM形式のデータを取り出す
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# 処理の都合上の処理
$value =~ s/\n//g;
$value =~ s/\,//g;
# 掲示板に書き込まれたくないタグが含まれる内容を消去する(タグが使える場合)
# ここでは、;
close(DB);
print "Content-type: text/html\n\n";
print '
' . "\n"; print '
' . "\n";
print "\n";
}
sub remove2 {
if (!open(DB,"$file")) { &error(0); }
@lines =