#!/usr/local/bin/perl # 日本語処理用のライブラリ require 'jcode.pl'; # 読み込まれたデータのハッシュ処理 &read_data; # データの長さチェック等 if (length($FORM{'u_name'}) > 40) { &error("名前が長すぎます。");} if (length($FORM{'subject'}) > 80) { &error("件名が長すぎます。");} if (length($FORM{'comment'}) > 1000) { &error("コメントが長すぎます。");} # logfile.datというファイルから現在のカウント数を読み込む open (IN, "logfile.dat") || &error("読み込みエラーが発生しました。"); @logdata=; close(IN); # データ数のチェック(もし100件以上なら99に変換) $kazu = @logdata; if ($kazu >=100) {pop(@logdata);} # 記事のトップデータから最新の番号の取得して、次の番号を決定 $no = (split(/\,/, $logdata[0]))[0]; $no++; # 時間の取得 ($sec,$min,$hour,$day,$mon,$year,$week) = localtime(time); @weekname = ('日','月','火','水','木','金','土'); $date = sprintf("%04d年%02d月%02d日(%s) %02d:%02d:%02d",$year+1900,$mon+1,$day,$weekname[$week],$hour,$min,$sec); # 追加するデータの作成 $add_data = "$no,$FORM{u_name},$FORM{subject},$FORM{comment},$date\n"; # 配列に追加 unshift(@logdata,$add_data); # ファイルの保存 open (OUT, ">logfile.dat") || &error("書き込みエラーが発生しました。"); print OUT @logdata; close(OUT); # 書き込みのデータ処理はここまで============================================================= # ここからHTMLでの表示 print <<"HTML"; Content-Type: text/html シンプルBBS書込終了 書き込みは正常に終了しました。(掲示板の表示はこちら)

HTML exit; # サブルーチン化された読み込み処理 sub read_data(){ if ($ENV{'REQUEST_METHOD'} eq "POST") { # 読み込まれたデータのサイズチェック if ($ENV{'CONTENT_LENGTH'} > 1300) { &error("入力された文字数が多すぎます。"); } read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { &error("この呼び出し方法は許可されていません。"); # $buffer = $ENV{'QUERY_STRING'}; } foreach (split(/&/, $buffer)) { ($keyword, $value) = split(/=/); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # S-JISコード変換 &jcode'convert(*value, "sjis", "", "z"); $value =~ s/&/&/g; # アンパサンド $value =~ s/"/"/g; # 括弧のエスケープ $value =~ s/\,/,/g; # カンマのエスケープ $value =~ s//>/g; # タグの排除 if ($keyword eq "comment"){ $value =~ s/\r\n/
/g; # 改行の処理 $value =~ s/\r/
/g; $value =~ s/\n/
/g; }else{ $value =~ s/\r//g; $value =~ s/\n//g; } $FORM{$keyword} = $value; } } # エラー表示用のサブルーチン sub error(){ $message = $_[0]; print <<"HTML"; Content-Type: text/html エラー($message) エラー($message) HTML exit; } __END__