えらいひさしぶりの更新です。
今日の授業は、ずばり!
アクセスカウンターとしての機能をほぼ完成させます。
とのこと。
早速、はじめます。
いつもの通り、ひたすらコード入力。
よくわからないコードも今回は多数存在します。
あせらないあせらない。後で説明してくれるはずです。
できた!
---------------------------
#! C:/perl/bin/perl
#カウントファイルの読み込み
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");
eval{ flock(FILE,2);};
$count = <FILE>;
#カウントファイルの書き込み
seek(FILE,0,0);
print FILE ++$count;
close(FILE);
#サーバ出力
print <<END;
Content-type; text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><titel>あくせすカウンター</titel></head>
<body>
<p>あなたは・・・・$count番目の訪問者です。</p>
</body>
</html>
END
---------------------------------
さっそく実行っす!
http://127.0.0.1/tendays/3-4.cgi
-----------------------
Content-type; text/html
あなたは・・・・9番目の訪問者です。
-----------------------
あれおかしいぞ。
Content-type; text/html
これはなんだなんだ
<title>が<titel>になってました。 修正!
</title>が</titel>になってました。 修正!
Content-type; text/htmlのセミコロンはコロンだな。修正!
完成!
今日のポイント
前回の授業との相違点。
アクセスカウンターに同時にアクセスされたときの、制御が追加されています。
以下、その部分説明をまとめます。
#カウントファイルの読み込み
#ファイルを入出力用モードで開くことができたら処理をそのまま実行
# 開くことができなかったらエラーメッセージ。
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");
#count.datファイルを排他ロックする。
#他の人がファイルを操作できなくする。
eval{ flock(FILE,2);};
#ファイルの中身(カウンターの数字)を変数$countに入れる
$count = <FILE>;
#カウントファイルの書き込み
#count.datファイルの先頭に書き込む位置を移動します。
#ファイルを読み込んだ後の決まりごとのようだ。
seek(FILE,0,0);
#count.datにカウントを+1して書き込みます。
print FILE ++$count;
#ファイルを閉じます
close(FILE);
ここで好奇心にかられ、count.datファイルを削除して実行してみました。
しかし結果は、Internal Server Error になりました。
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");
die関数が正常に働いていないのでしょうか?
いろいろためしてみましたがうまくいきませんでした・・・・・。
ここは今後の課題かな。
ではおしまい。