#!/usr/bin/perl $ver = ""; # バージョン情報 ### ■初期設定 ここから■ require './jcode.pl'; # jcodo.plのあるディレクトリに合わせて下さい。 $title = "会員専用掲示板"; # 掲示板のタイトル名 $ttl_clr = "#000088"; # 掲示板タイトルの表示色 $ttl_size = 6; # 掲示板タイトルのフォントサイズ $brd_clr = "#FFFFFF"; # 掲示板の背景色を指定 $brd_img = ""; # 掲示板の背景にイメージを使用する場合に指定 $home = "../top.htm"; # 戻るページのURL指定 $k_key = "pass"; # 管理者用パスワード(英数字) $pass = "0248"; # 認証用パスワード $name_size = 3; # 投稿者名のフォントサイズ $sbj_size = 3; # 題名のフォントサイズ $sbj_clr = "#000000"; # 題名の表示色 $cmt_size = 3; # コメントのフォントサイズ $cmt_clr = "#000000"; # コメントの表示色 $brd_file = "./board.log"; # 掲示板内容の格納ファイルの指定。 $script = "./1_bbs.cgi"; # スクリプトファイルの指定。 $method = "POST"; # methodの形式設定(POST or GET) $pagelog = 10; # 1ページ表示記事数 $logmax = 100; # 最大保存ログ数 $name_clr = "#0000ff"; # 記載名の色 $tag = 0; # タグの許可(0=off,1=on) $lock_key = 1; # ファイルロック(0=off,1=on) $cook = 1; # クッキー(0=off,1=on) ### ■初期設定 ここまで■ ### --- ログファイルチェック --- if (!-f $brd_file) { open(DB,">$brd_file") || &error("Can Not Log File"); close(DB); chmod 0666,$log_file; } ### ■メイン処理 &form_deco; if ($FM{'pass'} ne $pass) { &pass_inp; } if ($mode eq "bbs") { &bbs_wrt; } if ($mode eq "del") { &bbs_del; } &bbs_log; exit; ### ■HTMLのヘッダー sub header { print "Content-type: text/html\n\n"; print "\n\n"; print "\n"; print "$title\n"; if ($brd_img eq "") { print "\n"; } else { print "\n"; } print <ホームへ戻る]
$title
HTML } ### ■フォームからの入力データ処理 sub form_deco { if ($ENV{'REQUEST_METHOD'} eq "POST") { if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます。"); } read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $buf = $ENV{'QUERY_STRING'}; } @data = split(/&/,$buf); foreach (@data) { ($name,$value) = split(/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); # 文字コード変換 # --- タグの処理 --- if ($tag == 0) { $value =~ s//\>\;/g; $value =~ s/\"/\"\;/g; } else { $value =~ s/<>/\<\;\>\;/g; } $FM{$name} = $value; } $name = $FM{'name'}; $mail = $FM{'mail'}; $subject = $FM{'subject'}; $comment = $FM{'comment'}; $comment =~ s/\r\n\r/
/g; $comment =~ s/\r\n/
/g; $comment =~ s/\r|\n/
/g; $url = $FM{'url'}; $url =~ s/^http\:\/\///; $del_key = $FM{'del_key'}; $mode = $FM{'mode'}; $page = $FM{'page'}; $del_no = $FM{'del_no'}; $del_pwd = $FM{'del_pwd'}; $k_pwd = $FM{'k_pwd'}; # --- 日時の取得 --- $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year = 1900 + $year; $mon++; if ($mon < 10) { $mon = "0$mon"; } if ($mday < 10) { $mday = "0$mday"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } $date = "$year年$mon月$mday日 $hour時$min分"; # 日時のフォーマット } ### ■error処理 sub error { &header; print <"$_[0]"

ホームへ戻る HTML exit; } ### ■パスワード認証画面 sub pass_inp { &header; print <

この掲示板は会員制です。

下記フォームにてパスワードの認証を行って下さい。

パスワード認証
パスワードを入力して下さい


HTML exit; } ### ■掲示板表示 sub bbs_log { if ($cook == 1) { &getcookie; } &header; print <
名前
E-Mail
題目
コメント
URL
削除キー
名前・コメント・削除キーは必須項目です。
削除キーを入力する事により、投稿記事の削除が可能\です。

HTML open(LOG,"$brd_file") || &error("パスワードファイルを開けません。"); @bbs = ; close(LOG); if ($page eq '') { $page1 = 0; } else { $page1 = $page; } # --- ログ数を取得 --- $log_length = @bbs; $page2 = $page1 + ($pagelog - 1); if ($page2 >= $log_length - 1) { $page2 = $log_length - 1; } print "
現在の掲示数: $log_length 件 (最大保存記事数: $logmax 件)
\n"; print "
\n"; foreach ($page1 .. $page2) { ($h_num,$h_date,$h_name,$h_mail,$h_subject,$h_comt,$h_url)=split(/<>/,$bbs[$_]); if ($h_mail ne "") { $h_name = "$h_name"; } if ($h_url ne "") { $h_url = "

http://$h_url\n"; } # --- 投稿記事がある時のみ記事表示 --- if ($log_length != 0) { print <$h_name $h_subject

$h_comt $h_url

■投稿日 $h_date

HTML } } print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; # --- 前ページ処理 --- if ($page1 != 0) { $page = $page1 - $pagelog; if ($page < 0) { $page = 0; } print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; } print "
\n"; # --- 次ページ処理 --- if ($page2 ne $log_length - 1) { $page = $page2 + 1; print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; } print "
\n"; # --- ユーザー記事削除 --- print <
以下のフォームから自分の投稿した記事を削除できます。
■削除No ■削除キー
$ver
HTML exit; } ### ■掲示板ログ書き込み処理 sub bbs_wrt { # --- 名前とコメントは必須 --- if ($name eq "") { &error("名前が入力されていません。"); } if ($comment eq "") { &error("コメントが入力されていません。"); } if ($del_key eq "") { &error("削除キーが入力されていません。"); } # --- 掲示板ログを開く --- open(LOG,"$brd_file") || &error("ログファイルを開けません。"); @bbs = ; close(LOG); # 二重投稿の禁止 ($k_num,$k_date,$k_name,$k_mail,$k_subj,$k_comt,$k_url,$k_del_key) = split(/<>/,$bbs[0]); if ($name eq $k_name && $comment eq $k_comt) { &error("二重投稿は禁止です。"); } if ($url eq "http://") { $url = ""; } $num = $k_num + 1; unshift (@bbs,"$num<>$date<>$name<>$mail<>$subject<>$comment<>$url<>$del_key<>\n"); # --- 最大保存ログの処理 --- @new = (); $log_cnt = 0; foreach $bbs (@bbs) { $log_cnt ++; if ($log_cnt > $logmax) { last; } push(@new,$bbs); } # --- ログの更新 --- open(LOG,">$brd_file") || &error("ログファイルに書き込めません。"); if ($lock_key == 1) { flock(LOG,2); } # File Lock print LOG @new; if ($lock_key == 1) { flock(LOG,8); } # File UnLock close(LOG); if ($cook == 1) { &setcookie; } } ### ■記事の削除処理 sub bbs_del { if ($del_no eq "") { &error("削除Noが入力されていません。"); } if ($del_pwd eq "") { &error("削除キーが入力されていません。"); } # --- ログの読み込み --- open(LOG,"$brd_file") || &error("ログファイルが開けません。"); @bbs = ; close(LOG); @new = (); $kenri = 0; foreach (@bbs) { $flag = 0; @bbs_log = split(/<>/,$_); if ($bbs_log[0] == $del_no && $bbs_log[7] eq $del_pwd) { $flag = 1; $kenri = 1; } if ($bbs_log[0] == $del_no && $k_key eq $del_pwd) { $flag = 1; $kenri = 1; } if ($flag ==0) { push(@new,$_); } } if ($kenri == 0) { &error("あなたの指定した記事No$del_noは、削除の権利がありません。"); } # --- ログの更新 --- open(LOG,">$brd_file") || &error("ログファイルが開けません。"); if ($lock_key == 1) { flock(LOG,2); } # File Lock print LOG @new; if ($lock_key == 1) { flock(LOG,8); } # File UnLock close(LOG); } ### ■クッキーの発行 sub setcookie { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60); if ($yearg < 10) { $yearg = "0$yearg"; } if ($secg < 10) { $secg = "0$secg"; } if ($ming < 10) { $ming = "0$ming"; } if ($hourg < 10) { $hourg = "0$hourg"; } if ($mdayg < 10) { $mdayg = "0$mdayg"; } $yearg = 1900 + $yearg; $mong = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct', 'Nov','Dec') [$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday', 'Saturday') [$wdayg]; $date_gmt = "$youbi, $mdayg\-$mong\-$yearg $hourg:$ming:$secg GMT"; $cookie ="name\:$FM{'name'}\,mail\:$FM{'mail'}\,url\:$url\,del\:$FM{'del_key'}"; print "Set-Cookie: BOARD=$cookie; expires=$date_gmt\n"; } ### ■クッキーの取得 sub getcookie { @pairs = split(/;/,$ENV{'HTTP_COOKIE'}); foreach $pair (@pairs) { local($name, $value) = split(/=/, $pair); $name =~ s/ //g; $COOK{$name} = $value; } @pairs = split(/,/,$COOK{'BOARD'}); foreach $pair (@pairs) { local($name, $value) = split(/:/, $pair); $COOKIE{$name} = $value; } $cname = $COOKIE{'name'}; $cmail = $COOKIE{'mail'}; $curl = $COOKIE{'url'}; $cdel = $COOKIE{'del'}; if ($FM{'name'}) { $cname = $FM{'name'}; } if ($FM{'mail'}) { $cmail = $FM{'mail'}; } if ($url) { $curl = $url; } if ($FM{'del_key'}) { $cdel = $FM{'del_key'}; } }