#!/usr/bin/perl # プロトタイプ掲示板 Version1.10 # # 2000/10/13 宍戸 輝光 # # 設置方法 # pbbs.cgiとjcode.plを同じディレクトリにアスキーで転送し # pbbs.cgiの属性を755などCGIとして実行できるものにする。 # 次に、pbbs.cgiと同じディレクトリにpbbs.datという空ファ # イルを作成(内容のないファイルを転送しても良い)して、 # 666など書き込み可の属性にする。これで、pbbs.cgiを開くと # 掲示板として利用できるようになる。 # # 注意 # このスクリプトは実用性を無視したサンプルです。ファイル # のロックもしていないので、同時に複数の書き込みがあった # 時などにはデータが失われる可能性があります。利用する時 # には、このまま使うのではなく、いろいろな機能を追加して # いくプロトタイプとしてご利用ください。 require "jcode.pl"; # postされたデータを読み込む read(STDIN,$query,$ENV{'CONTENT_LENGTH'}); @indata=split(/&/,$query); foreach $body(@indata) { ($name,$val)=split(/=/,$body); $val=~ tr/+/ /; # データをデコード $val=~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C",hex($1))/eg; &jcode'convert(*val,"sjis"); $val=~ s/</g; # タグ無効化 $val=~ s/>/>/g; $val=~ s/\t//g; # タブ削除 $form{$name}=$val; } $mode=$form{'mode'}+0; $start=$form{'start'}+0; $dfile="pbbs.dat"; # データファイル $ret="../index.html"; # 「戻る」でリンクするパス $cgi="pbbs.cgi"; # スクリプトファイル $num=3; # 表示件数 # データファイルの記録項目 @dname=('no','date','name','mail','http','title','comment'); print "Content-type: text/html\n\n"; if (!(-e $dfile)) { print "\n
\n\n"; print "データファイルが見つかりません。
\n\n"; print "\n\n"; exit; } if ($mode==2) { # 登録処理 if ($form{'name'} eq "" || $form{'comment'} eq "" || $form{'title'} eq "") { print "\n\n\n"; print "お名前とタイトル・本文は必須です。
\n\n"; print "\n\n"; exit; } ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday)=localtime(time); $year+=1900; $mon++; # 記録データを作成 $data{'date'}=sprintf("%04d/%2d/%2d-%02d:%02d:%02d",$year,$mon,$mday,$hour,$min,$sec); $data{'name'}=$form{'name'}; $data{'mail'}=$form{'mail'}; $data{'http'}=$form{'http'}; $data{'title'}=$form{'title'}; $data{'comment'}=$form{'comment'}; $data{'comment'}=~ s/\r\n/; truncate(F,0); seek(F,0,0); # データ番号を計算 if ($dat[0] eq '') { $no=1; } else { @mem=split(/\t/,$dat[0]); $no=$mem[0]+1; } $data{'no'}=$no; # データ項目配列@dnameを基に記録する文字列を作成 for ($i=0;$i<@dname;$i++) { $name="$dname[$i]"; $str="$str$data{$name}\t"; } print F "$str\n"; print F @dat; close(F); } # データ読みこみ open(F,$dfile); @dat=_no:. _title: |
---|
投稿者:_name:_mail:_http: |
_comment: |
\n"; } if ($len>$start+$num) { $str="次の$num件"; $mes="$mes | \n"; } $mes="$mes |
データなし
\n"; } else { $start=$start+1; if ($start!=$end) { $mes="$mes全$len件、$start〜$end件目
\n"; } else { $mes="$mes全$len件、$end件目
\n"; } } # 掲示板HTML表示フォーマット $html= <_ret: