#!/usr/local/bin/perl # 文書登録システムプロトタイプ Version 1.00 # # 2000/ 5/15 宍戸 輝光 # 設置方法 # # スクリプトと同じディレクトリにpregという書き込み可(666)の # ディレクトリを作成してください。データファイルなどは自動的に # 作成されます。 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; $val=~ s/\t/ /g; $val=~ s//>/g; &jcode'convert(*val,"sjis"); $form{$name}=$val; } $mode=$form{'mode'}; $name=$form{'name'}; $mail=$form{'mail'}; $http=$form{'http'}; $title=$form{'title'}; $key=$form{'key'}; $comment=$form{'comment'}; $start=$form{'start'}+0; $skey=$form{'skey'}; $sfile="preg.cgi"; # スクリプトファイル名 $dpath="./preg"; # データパス $dfile="$dpath/preg.dat"; # データファイル名 $rpath="../index.html"; # 「戻る」パス $lockdir="$dpath/preglock"; # ロック用ディレクトリ $try=5; # ロック再試行回数 $num=5; # データ表示件数 print "Content-type: text/html\n\n"; print "\n"; print "\n文書登録システムプロトタイプ\n\n"; print "\n\n"; if ($mode eq "1") { # 登録処理 if ($name eq "" || $title eq "" || $comment eq "") { print "

お名前とタイトル・本文は必須です。

\n"; print "\n"; print "\n"; exit; } if (length($comment)>2048) { print "

本文が大きすぎます。

\n"; print "\n"; print "\n"; exit; } ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday)=localtime(time); $year+=1900; $mon++; $date=sprintf("%04d\/%2d\/%2d-%02d:%02d:%02d", $year,$mon,$mday,$hour,$min,$sec); # 改行を\nに統一 $comment=~ s/\r\n/\n/g; $comment=~ s/\r/\n/g; $str="$date\t$name\t$title\t$key\t"; if (!(-e $dfile)) { # データファイルがなければ新規作成 open(F,">$dfile"); close(F); } while (!mkdir($lockdir,0755)) { # ロック if (--$try<=0) { print "ロック失敗\n"; print "\n"; exit; } sleep(1); } open(F,"+< $dfile"); @datag=; if ($datag[0] eq '') { $no=1; } else { @mem=split(/\t/,$datag[0]); $no=$mem[0]+1; } # 文書ファイル作成 $fn="$dpath/$no.html"; open(W,"> $fn"); print W "\n\n\n"; print W "

$title

\n\n"; if ($key eq "") { $kstr="なし"; } else { $kstr=$key; } if ($mail eq "") { print W "

$date 検索キー:$kstr
作者:$name

\n"; } else { print W "

$date 検索キー:$kstr
作者:$name<$mail>

\n"; } print W "
\n$comment
\n
\n\n"; if ($http ne "") { print W "

作者ホームページ:$http

\n"; } print W "

戻る

\n\n"; print W "\n\n"; close(W); # データファイル更新 truncate(F,0); seek(F,0,0); print F "$no\t$fn\t$str\n"; print F @datag; close(F); rmdir $lockdir; # ロック解除 } print "

文書登録システムプロトタイプ

\n\n"; print "

 キーワード検索\機\能\付文書登録システムです。タイトルと検索キー、本文を登録すると、本文を基にHTMLファイルを作成し、そのファイルへのリンクやタイトル・検索キー(括弧内)を一覧表\示します。検索は、検索キーに対する文字列検索を行い検索キーに検索文字列を含む文書を一覧表\示します。

\n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "
お名前
メールアドレス
ホームページ
タイトル
検索キー
本文(最大2KB/改行有効・タグ無効)
\n"; while (!mkdir($lockdir,0755)) { # ロック if (--$try<=0) { print "ロック失敗\n"; print "\n"; exit; } sleep(1); } open(F,"$dfile"); @datag=; close(F); rmdir $lockdir; # ロック解除 @hits=(); foreach $d(@datag) { # 検索条件にあう文書のみを抽出 @mem=split(/\t/,$d); if ($skey eq "" || index($mem[5],$skey)>=0) { push(@hits,$d); } } $len=@hits; $end=$start+$num; if ($len<$num) { $start=0; $end=$len; } elsif ($end>$len) { $end=$len; } for ($i=$start;$i<$end;$i++) { @mem=split(/\t/,$hits[$i]); if ($mem[5] eq "") { print "

$mem[0].$mem[4]-$mem[2]

\n"; } else { print "

$mem[0].$mem[4]($mem[5])-$mem[2]

\n"; } } print "\n\n"; if ($start>0) { $st=$start-$num; if ($st<0) { $st=0; } print "\n"; } if ($len>$start+$num) { print "\n"; } print "
\n"; print " \n"; print " \n"; print " \n"; print "
\n"; print " \n"; print " \n"; print " \n"; print "
\n"; print "

\n"; if ($len>0) { print "全$len件
\n"; } else { print "文書がありません
\n"; } print "検索文字列 \n"; print "\n"; print "

\n"; print "

戻る

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