#!/usr/local/bin/perl #---------------------------------------------------------- # インクルード require 'jcode.pl'; #---------------------------------------------------------- # 初期設定 $bbs_title = "EasyBBS Ver 1.0"; # BBSのタイトル $title_color = "#008040"; # タイトルの色 $title_size = 6; # タイトルの文字サイズ $title_image = ""; # タイトル画像 $max = 50; # 最大保存件数 $com_color = "#CC0000"; # コメント(題名)の色 $bk_color = "#FFFFFF"; # 背景色 $bk_image = ""; # 背景画像 $tx_color = "#000000"; # テキスト色 $logfile = "/home/fujio/public_html/jp/bbs/about-s/abouts.log"; # ログデータ格納ファイル $method = 'POST'; # データの取得形式 #---------------------------------------------------------- # メイン処理 # 入力データの解析 &input_decode; # 入力データを %form に格納 # 入力データのログファイルへの登録 if($form{'mode'} eq 'write'){ # 書き込みモードならばログファイル更新 ®ist_log; # logfileの更新 } # ログファイルのHTML出力 &out_header; # HTMLヘッダーの出力 &out_contents; # ログファイルの中身をHTML形式で出力 #---------------------------------------------------------- # サブルーチン #--- 入力の解析 --- sub input_decode{ # ローカル変数の定義 local($name, $value, @pairs); # 入力データの取得 if( $ENV{'REQUEST_METHOD'} eq $method ){ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # POSTでのデータ受け取り }else{ $buffer = $ENV{'QUERY_STRING'}; # GETでのデータ受け取り } # 入力データの有無チェックとデータ解析 if($buffer eq ""){ # データが無い場合は READ $form{'mode'} = 'read'; }else{ # データがある場合は分析し WRITE $form{'mode'} = 'write'; # データの分解 @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; # S-JISコードへの変換 &jcode'h2z_sjis(*value); # 半角を全角にする &jcode'convert(*value,sjis); # Shift_JISに変換す # 使用禁止タグコードの除去 $value =~ s/&/&/g; # & の除去 $value =~ s/"/"/g; # " の除去 $value =~ s//>/g; # > の除去 $value =~ s/\n//g; # 改行の除去 # データの格納 $form{$name} = $value; } } } #--- ログファイルへの書き込み --- sub regist_log{ # ローカル変数の定義 local($date,$name,$mail,$sub,$com); # フォーム入力内容の確認(名前とコメントは必須) if($form{'name'} eq ""){ &error("名前が入力されていません"); } if($form{'comment'} eq ""){ &error("コメントが入力されていません"); } # 時間データの取得($dateに格納) &get_time; # ログファイルデータの取得 open(LOG,"$logfile") || &error("ログファイル$logfileがオープンできません[0]"); @lines = ; close(LOG); # データの更新(先頭に新規データ挿入)データの区切りは"<>"とする unshift(@lines, "$date<>$form{'title'}<>$form{'name'}<>$form{'mail'}<>$form{'homepage'}<>$form{'comment'}<>\n"); # データ数の制限チェック if( $#lines >= $max-1 ){ pop(@lines);} # 最大件数を超えたデータを削除 # ログファイルへの格納 open(LOG,">$logfile") || &error("ログファイル$logfileが書き込みでオープンできません"); print LOG @lines; close(LOG); } #--- 日付取得 --- sub get_time{ local($sec,$min,$hour,$mday,$month,$year,$yday,$isdst); # ローカル変数の定義 # 時刻の取得 ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(time); # 曜日データの作成 @week = ('日','月','火','水','木','金','土'); $wday = $week[$wday]; # データ作成と桁数合わせ(2桁) $month += 1; $year += 1900; return $date = sprintf("%d年 %d月 %02d日(%s) %02d時 %02d分 %02d秒" ,$year,$month,$mday,$wday,$hour,$min,$sec); } #--- ヘッダー出力 --- sub out_header{ print "Content-type: text/html\n\n"; print ""; print ""; print "$bbs_title"; print ""; if($title_image ne ""){ print "\"bbs_title\""; } } #--- ログファイルの中身をHTML形式で出力 --- sub out_contents{ local($date,$title,$name,$mail,$homepage,$comment); # ローカル変数の定義 open (LOG, "$logfile") || &error("ログファイル$logfileがオープンできません[1]"); while(){ # 1データを要素に区切る ($date,$title,$name,$mail,$homepage,$comment) = split(/<>/); # 要素の書き出し print "タイトル: $title
"; # タイトルの書き出し print "名前: $name   "; # 名前の書き出し # メイルアドレス、ホームページの有無により1行のデータを作成する $ref = ""; if($mail ne ""){ # mailデータがあるか $ref = $ref . "email  "; } if($homepage ne "http://"){ # homepageデータがあるか $ref = $ref . "URL"; } if($ref ne ""){ # mail/URLのどちらかのデータがあるか print $ref; print "
"; } print "投稿: $date
"; # 投稿データ $comment =~ s/\r/
/g; # 改行の挿入 print "
$comment

"; } close(LOG); print "
EasyBBS lite Version 1.0 Copyright Fujio Lab.
"; print "\n"; # タグ出力 } #--- エラー処理 --- sub error{ &out_header; # ヘッダー出力 local($msg) = @_; # エラーメッセージの設定 print "

Error



\n"; # タグ出力 print "

$msg

\n\n"; exit; }