#!/usr/local/bin/perl

#
#	kimeicho.cgi?action=[message|write]&place=../lui
#
$jcode = 'jcode.pl';
require $jcode;

$commonmsg = <
基礎情報処理のホームページへ

END_OF_DATA

@qstr = split(/&/, $ENV{'QUERY_STRING'});
foreach $x (@qstr) {
	($name, $value) = split(/=/, $x);
	$QPARAM{$name} = $value;
}

$action = $QPARAM{"action"};
$dir = $QPARAM{"dir"};
$msgFile = "${dir}/messages.txt";
$tmpFile = "${dir}/messages.tmp";
$g_lockfile = "${dir}/lock/lockfile.lock";

$indexFile = "${dir}/index.html";
	if ($action ne "write") {
	&printHeader("御記名帳:");
	print "
\n"; print "\n"; unless(open(FH, "<$msgFile")) { &showErrorPage("ファイル処理に失敗しました。"); exit(0); } while() { print; } close(FH); print "
\n"; print "
    \n"; print "
  • 戻る\n"; print "
  • $commonmsg\n"; print "
\n"; &printFooter(); }else{ read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); @a = split(/&/, $query_string); foreach $x (@a) { ($name, $value) = split(/=/, $x); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; &jcode'convert(*value, "euc"); &jcode'h2z_euc(*value); $value =~ s/&/&/g; $value =~ s//>/g; $value =~ s/\r\n/\n/g; $value =~ s/\s+$//; &jcode'convert(*value, "sjis"); $FORM{$name} = $value; } unless(&fileLock()) { &showErrorPage("ロックが解除されていません。別のクライアントからの書き込み処理が終了していません。しばらくして再度やりなおしてください。"); exit(0); } unless(open(FH, ">$tmpFile")) { &showErrorPage("ファイル処理に失敗しました。"); exit(0); } print FH "\n"; print FH "
"; print FH "\n"; print FH "\n"; print FH "\n"; print FH "
記入者"; print FH $FORM{"name"}; print FH "
メールアドレス"; print FH $FORM{"mailaddress"}; print FH "
記入日時"; $d =`date +'%Y/%m/%d %H:%M'`; print FH $d; print FH "

"; @msgs = split(/[\n\r]/,$FORM{"message"}); print FH join("
",@msgs); print FH "
\n"; print FH "\n\n"; unless(open(PR, "<$msgFile")) { &showErrorPage("ファイル処理に失敗しました。"); exit(0); } while() { print FH; } close(PF); close(FH); unless(open(FH, ">$msgFile")) { &showErrorPage("ファイル処理に失敗しました。"); exit(0); } unless(open(PR, "<$tmpFile")) { &showErrorPage("ファイル処理に失敗しました。"); exit(0); } while() { print FH; } close(PF); close(FH); &fileUnlock(); &printHeader("記入されたデータは記録されました:"); print "
\n"; print "
    \n"; print "
  • 戻る\n"; print "
  • $commonmsg\n"; print "
\n"; &printFooter(); } exit(0); # # ファイルをロックする # sub fileLock { for ($i = 1; $i <= 6; $i++) { if (mkdir($g_lockfile, 755)) { last; } elsif ($i < 6) { sleep(2); } else { return(undef); } } return(1); } # # ファイルのロックを解除する # sub fileUnlock { for ($i = 1; $i <= 4; $i++) { if (rmdir($g_lockfile) == 0) { last; } elsif ($i < 4) { sleep(1); } else { return(undef); } } return(1); } # # エラーページ # sub showErrorPage #($errmsg) { local($errmsg) = @_; &printHeader("エラー:"); print "
\n"; print $errmsg; &printFooter(); } # # ヘッダを書き出す # sub printHeader #($title) { local($title) = @_; print "Content-type: text/html\n"; print "\n"; print "\n"; print "\n"; print "$title\n"; print "\n"; print "\n"; print "

$title

\n"; } # # フッタを書き出す # sub printFooter { print "\n"; print "\n"; }