#! /usr/local/bin/perl ;# ↑このパスはプロバイダによって違うので調べて設定する ;# (これはこのスクリプトの最初の1行になければならず、それより上に空行があってもいけません。) ;# (この設定が必要ないサーバもあります。一般的な場合を想定して解説を入れています。) ;# (他に、プロバイダからアナウンスされている情報を十分理解しておいてください。) ;# ;# 簡易BBS version 7.5(フリーソフト) ;# ;# Script written by Kazu.Y ;# Created on: 02/05/96 ;# Last Modified on: 11/06/97 ;# I can be reached at: rescue@ask.or.jp ;# Scripts Found at: http://www.ask.or.jp/~rescue/ ;# ;# <利用規定の抜粋> ;# 1.このスクリプトは自分で使うために承諾なしに自由に改造することができます。 ;# 2.改造の有無にかかわらず、このスクリプトを再配布することはできません。 ;# 3.このシステムを有償で他人に設置してあげたりする行為は無断ではできません。 #--- 必ずあなたの環境に合わせて書き替える項目 --------------------------------------------# # 削除モード移行パスワードの設定(''内に任意のパスワードを記述する) $password = '適当に決めてね'; # 掲示板の名前 $title = '(掲示板の名前)削除画面'; # このスクリプトをURLで設定(勝手に決めてね) $reload = 'delete.cgi'; #--- 必要に応じて設定する項目 ------------------------------------------------------------# # 文字色や背景などの設定(通常のタグ) # 題名と投稿者色はスクリプト内のタグを探して設定してください。 $body = ''; # 日本語コード変換ライブラリ # この jcode.pl を minibbs.cgi と違うディレクトリに設置する場合は相対的に設定すること require './jcode.pl'; # 内容が書き込まれる記録ファイルのパスを設定 # この minibbs.dat を minibbs.cgi と違うディレクトリに設置する場合は相対的に設定すること $file = './loveyou.dat'; # 海外サーバ等で時差が生じる場合は修正します # 海外時間に+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); # 入力形式の設定 標準入力:post その他:get # 投稿ボタンを押して Method not implemented.. というエラーが出る場合は get で試すこと $method = 'post'; ########################################################################################### # # ・記録ファイルには処理の都合上特殊コードが記録されますので、直接編集はできません。 # ・スクリプトの中身を書き替える場合は、perlやCGIやHTMLなどのそれなりの知識が必要です。 # ・設置に関する質問はチャレンジCGI専用掲示板をご利用ください。改造の質問は受けません。 # http://www2r.meshnet.or.jp/~rescue/webboard/ # ########################################################################################### # 上記のlocaltimeで取得した$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形式のデータを取り出す @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; # 記録するデータはsjisに統一する &jcode'convert(*value,'sjis'); # 処理の都合上の処理 $value =~ s/\n//g; # 改行文字はデータの記録に影響があるので消去する $value =~ s//>/g; $value =~ s/\,//g; if ($name eq "target") { push(@RM,$value); } else { $FORM{$name} = $value; } } # 全体の流れを決定する(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; } &html; sub html { #--- 入力フォーム画面 --------------------------------# # CGIで出力されたデータをHTMLとして認識させるヘッダの出力 print "Content-type: text/html\n\n"; print "$title\n"; print "\n"; print "$title

\n"; print "

\n"; print "

パスワード \n"; print "

\n"; # このスクリプトの著作権表示(かならず表示してください) print "


MiniBBS v7.5 is Free.

\n"; print "\n"; exit; } sub error { # &error(xx); で呼び出されたルーチンは、()内の数字が $error に代入される。 $error = $_[0]; if ($error eq "0") { $error_msg = '記録ファイルの入出力にエラーが発生しました。'; } elsif ($error eq "1") { $error_msg = '投稿者名が記入されていません。'; } elsif ($error eq "2") { $error_msg = '内容が書かれていません。または記録禁止のタグが書かれています。'; } elsif ($error eq "3") { $error_msg = 'メールアドレスが正しく入力されていません。'; } elsif ($error eq "4") { $error_msg = 'メールアドレスは複数指定できません。'; } elsif ($error eq "tag") { $error_msg = '利用ができないタグが記述されていますので投稿できません。'; } elsif ($error eq "form") { $error_msg = "投稿画面のURLが
$reload
" . '以外からの投稿はできません。'; } print "Content-type: text/html\n\n"; print "$title\n"; print "$body\n"; print "

$error_msg

\n"; print "\n"; exit; } sub remove1 { if (!open(DB,"$file")) { &error(0); } @lines = ; close(DB); print "Content-type: text/html\n\n"; print "$title\n"; print "\n"; print "削除モード [戻る] [掲示板に戻る]

\n"; print "

\n"; print "\n"; print "\n"; print "
\n"; print "
";
        print "   登録日                  投稿者               タイトル              内容
\n"; foreach $line (@lines) { ($date,$name,$email,$value,$subject) = split(/\,/,$line); $name =~ s//>/g; $value =~ s//>/g; $subject =~ s//>/g; $value =~ s/\0/\,/g; chop($subject) if $subject =~ /\n/; $value =~ s///ig; $value =~ s//>/ig; $value =~ s/\n/./g; $value =~ s/\r/./g; $i1 = length($subject); if ($i1 > 20) { $subject = substr($subject,0,18); $subject = $subject . '..'; } elsif ($i1 < 20) { $blank = ' ' x (20 - $i1); $subject = $subject . $blank; } $i2 = length($name); if ($i2 > 20) { $name = substr($name,0,18); $name = $name . '..'; } elsif ($i2 < 20) { $blank = ' ' x (20 - $i2); $name = $name . $blank; } if (length($value) > 40) { $value = substr($value,0,40); } print ""; print "$date $name $subject $value \n"; } print "

\n"; print "

\n"; print "\n"; } sub remove2 { if (!open(DB,"$file")) { &error(0); } @lines = ; close(DB); foreach $line (@lines) { ($date,$name,$email,$value,$subject) = split(/\,/,$line); $del = 0; foreach $target (@RM) { if ($target eq $date) { $del = 1; } } if ($del == 0) { push(@new,$line); } } if (!open(DB,">$file")) { &error(0); } print DB @new; close(DB); } #end_of_script