#!/usr/bin/perl $ver = 'EZ-BBS for icon v1.0'; # バージョン情報(修正不要) ## ----- 基本設定 --------------------- # # jcode.plを取りこむ # --> jcode.plが同一ディレクトリにある場合は以下のままでOK. require './jcode.pl'; # タイトル名の設定 $title = "楽しい掲示板"; # タイトル名 $t_color = "#008040"; # タイトルの色 $t_size = 6; # タイトルの文字サイズ $t_face = "MS Pゴシック"; # タイトルの文字フォント # bodyタグ(背景色、文字色等を指定) $body = ''; # 戻り先のURL (http://から記述してもよい) $homepage ="javascript:history.go(-1)"; # 最大保有記事数(これを超える記事は自動削除される) $max = 25; # 管理者用パスワード (半角の英数字で指定) $pass = 'auction'; # コメント部 [題名] の色 $sub_color = "#CC0000"; # 記事表示部の下地の色 $tbl_color = "#333333"; # スクリプト名 (この掲示板のファイル名) $script = "bbs.cgi"; # ログファイル # --> フルパスで記述する場合は / から始まるパスで記述する. # --> bbs.cgi と同じディレクトリに置く場合は以下のままでOK. $logfile = "./bbs.log"; # methodの形式 (POST or GET) $method = 'POST'; # 1ページ当たりの記事表示数 $pagelog = 10; ## ----- 設定ここまで ----------------- # ## --- BBSのメイン処理 &form_decode; if ($mode eq "regist") { ®ist; } elsif ($mode eq "howto") { &howto; } elsif ($mode eq "admin") { &admin; } &html; ## --- 記事表示部 sub html { # ブラウザを判断 &get_agent; # 表示開始 &header; print <<"EOM";
楽しい[トップにもどる]
題  名 おなまえ Eメール
 
イメージ

(あなたのイメ
ージを選択して
下さい)
メッセージ
URL

EOM open(IN,"$logfile") || &error("Can't open $logfile"); @lines = ; close(IN); if ($page eq '') { $page = 0; } $start = $page; $end = $page + $pagelog-1; $page = $page + $pagelog; foreach ($start .. $end) { if (!$lines[$_]) { last; } ($num,$date,$name,$email,$sub, $com,$url,$host,$ango,$icon) = split(/<>/, $lines[$_]); if ($email) { $name="$name"; } if (!$sub) { $sub = "無題"; } if ($url) { $url = "http://$url\n"; } print "\n"; print "
\n"; print "
[$num] $sub\n"; print "投稿者:$name\n"; print "投稿日:$date
\n"; # アイコン表示 print "\n"; print "
$com

$url

\n"; print "

\n"; } print "

\n"; # 前頁処理 $back_line = $page - ($pagelog*2); if ($back_line >= 0) { print "\n"; } # 次頁処理 if ($#lines >= $page) { print "\n"; } print "
\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "
\n"; # 著作権表示(削除禁止) print "
\n"; print "- e-sTate -[掲示板の使い方][管理用]\n"; print "
\n"; print "\n"; exit; } ## --- ログ書き込み処理 sub regist { # 名前とコメントは必須 if ($name eq "") { &error("名前が入力されていません。"); } if ($com eq "") { &error("コメントが入力されていません。"); } # 時間を取得 &get_time; # ホスト名を取得 $host = $ENV{'REMOTE_HOST'}; if ($host eq '') { $host = $ENV{'REMOTE_ADDR'}; } # ログを読み込み open(IN,"$logfile") || &error("Can't write $logfile"); @lines = ; close(IN); # 1つ前の記事を取得し分解 ($bno,$bdate,$bname,$bemail,$bsub,$bcom,$burl,$bhost) = split(/<>/, $lines[0]); # 二重投稿禁止処理(名前とコメント内容をチェック) if ($name eq "$bname" && $com eq "$bcom") { &error("二重投稿は禁止です。"); } # 記事Noを取得 $no = $bno + 1; # 最大記事数を超える記事をカット if ($max <= @lines) { while ($max <= @lines) { pop(@lines); } } # ログ更新処理 unshift (@lines,"$no<>$date<>$name<>$email<>$sub<>$com<>$url<>$host<><>$FORM{'icon'}<>\n"); open(OUT,">$logfile") || &error("Can't write $logfile"); print OUT @lines; close(OUT); } ## --- フォームからのデータ処理 sub form_decode { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @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; # 文字コード変換 (Shift-JISコード) &jcode'convert(*value,'sjis'); # タグ等禁止処理 $value =~ s/&/&/g; $value =~ s//>/g; $value =~ s/\"/"/g; # 削除情報 if ($name eq 'del') { push(@DEL,$value); } $FORM{$name} = $value; } $name = $FORM{'name'}; $com = $FORM{'comment'}; $com =~ s/\r\n/
/g; $com =~ s/\r|\n/
/g; $email = $FORM{'email'}; $url = $FORM{'url'}; $url =~ s/http\:\/\///g; $mode = $FORM{'mode'}; $act = $FORM{'act'}; $sub = $FORM{'sub'}; $page = $FORM{'page'}; } ## --- 掲示板の使い方メッセージ sub howto { &header; print <<"HTML"; [掲示板にもどる]
掲示板の利用上の注意

  1. 記事を投稿する上での必須入力項目は「おなまえ」「メッセージ」です。Eメール、URL、題名は任意です。

  2. 記事の保持件数は最大 $max件です。それを超えると古い順に自動削除されます。

  3. 管理者が著しく不利益と判断する記事や他人を誹謗中傷する記事は予\告なく削除することがあります。
HTML exit; } ## --- 管理モード sub admin { if (!$act) { # パスワード入力画面 &header; print "
\n"; print "管理モード\n"; print "
\n"; print "

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

\n"; print "
\n"; print "\n"; print "\n"; print ""; print "
\n"; print "\n"; exit; } else { # パスワードチェック if ($FORM{'pass'} ne "$pass") { &error("パスワードが違います。"); } } # ログを読みこみ open(IN,"$logfile") || &error("Can't open $logfile"); @lines = ; close(IN); # 削除処理 if ($act eq 'delete') { if (@DEL[0] eq '') { &error("削除情報がありません。"); } @new=(); foreach $line (@lines) { $flag=0; ($num,$date,$name,$email,$sub,$com,$url,$host) = split(/<>/, $line); foreach $del (@DEL) { if ($num eq "$del") { $flag=1; last; } } if ($flag == 0) { push(@new,$line); } } # ログを更新 open(OUT,">$logfile") || &error("Can't write $logfile"); print OUT @new; close(OUT); @lines = @new; } # 管理画面を表示 &header; $count = @lines; print "[掲示板にもどる]\n"; print "
\n"; print "管理モード\n"; print "
\n"; print "

\n"; print "
  • 削除する記事のチェックボックスにチェックを入れ、削除キーを押して下さい。\n"; print "
  • 現在の記事数は $count 件です。
  • \n"; print "
    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; foreach $line (@lines) { ($num,$date,$name,$email,$sub,$com,$url,$host) = split(/<>/, $line); if ($email) { $name = "$name"; } if (!$sub) { $sub = "無題"; } $com =~ s/
    / /g; $com =~ s//>/g; if (length($com) > 60) { $com = substr($com,0,58); $com = "$com" . '..'; } print "\n"; } print "
    削除記事No題名投稿者名コメントホスト名
    \n"; print "$num$sub$name$com$host

    \n"; print "\n"; print "

    \n\n"; exit; } ## --- ブラウザを判断しフォーム幅を調整 sub get_agent { # ブラウザ情報を取得 $agent = $ENV{'HTTP_USER_AGENT'}; $nam_wid = 20; $sbj_wid = 25; $com_wid = 78; $url_wid = 49; # MSIE3の場合 if ($agent =~ /MSIE 3/i) { $nam_wid = 20; $sbj_wid = 40; $com_wid = 78; $url_wid = 48; } # MSIE4の場合 elsif ($agent =~ /MSIE 4/i) { $nam_wid = 20; $sbj_wid = 40; $com_wid = 78; $url_wid = 70; } } ## --- エラー処理 sub error { &header; print "

    ERROR !

    \n"; print "

    $_[0]\n"; print "


    \n"; print "\n"; exit; } ## --- HTMLのヘッダー sub header { print "Content-type: text/html\n\n"; print "\n\n"; print "\n"; print "$title\n"; print "$body\n"; } ## --- 時間の取得 sub get_time { $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"; } $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; # 日時のフォーマット $date = "$year\/$mon\/$mday($week) $hour\:$min"; }