その他にもどる
ファイル操作
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 その他にもどる