logo

その他にもどる

ファイル操作

CGIファイルが bbs.cgi データーファイルが date.log だとすると、先頭部分に次のようになる
$script = "bbs.cgi";
$logfile = "date.log";
$lockfile = "date.lock";


そして最後の方には次のように書いておく
sub lock {
	local($flag) = 0;
	foreach (1 .. 5) {
	if (-e $lockfile) { sleep(1); }
	else {
	open(LOCK,">$lockfile");
	close(LOCK); $flag = 1; last; }
	}

	if ($flag == 0) { &error("Lock Error"); }
}

sub unlock {
	if (-e $lockfile) { unlink($lockfile); }
}

lockfile は logfile への書き込みが同時に複数行われた場合に、書き込みが二重に行われないようにロックするためのもの


上のように条件を設定しておけば、書き込み処理を行う場合の順番は下のようになり、記述も簡単になる
	&lock;

	open(OUT,">$logfile");

	($logfileに書き込み処理を行う)

	&unlock;


新しいデーターを追加する方法

新規登録などで 名前 と 住所 を入力し、その後にデーターファイルに書き込む場合は下のようになる

	print "<form action=\"$script\" method=\"POST\" enctype=\"multipart/form-data\">\n";
	print "<input type=hidden name=mode value=\"sinki\">\n";
	print "名前<input type=text name=name size=20><br>\n";
	print "住所<input type=text name=add size=50><br>\n";
	print "<input type=submit value=\"新規登録画面へ\"></form>\n";



下のような画面になる
名前
住所

名前に「阿蘇太郎」 住所に「南阿蘇村1234番地」 と入力したとすると、$in{'name'} は「阿蘇太郎」、$in{'add'} には「南阿蘇村1234番地」が格納される

	&lock;
	open(IN,"$logfile") || &error("$logfileを開くことができません");
	@lines = <IN>;
	close(IN);

	($bno) = split(/,/, $lines[0]);
	$no = $bno + 1;

	unshift (@lines,"$no,$in{'name'},$in{'add'},\n");

	open(OUT,">$logfile") || &error("$logfileに書き込めません");
	print OUT @lines;
	close(OUT);
	&unlock;
($bno) = split(/,/, $lines[0]); は、すでに入力されているデーターの、最終投稿番号を調べるため

保存の際は、投稿NO 名前 住所 の順に記録している
$no と $in{'name'} の間に ,(カンマ) があるが、これも記録される こうすればデーターをカンマ区切りで保存でき、あとでExcelで編集する際に便利


---- End ----

↑PageTop その他にもどる