えらいひさしぶりの更新です。


今日の授業は、ずばり!


アクセスカウンターとしての機能をほぼ完成させます。


とのこと。


早速、はじめます。


いつもの通り、ひたすらコード入力。


よくわからないコードも今回は多数存在します。


あせらないあせらない。後で説明してくれるはずです。


できた!

---------------------------


#! 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関数が正常に働いていないのでしょうか?


いろいろためしてみましたがうまくいきませんでした・・・・・。


ここは今後の課題かな。


ではおしまい。