今日の授業で、アクセスカウンターを完成させます。
グラフィカルなカウンタを作ります。
今までは、CGIを直接呼び出していましたが、SSIという機能を使用して
shtmlファイルからcgiファイルを呼び出します。
では早速。
count.datファイルをc:/ApacehGroup/Apache2/htdocs/tendays/に作成
digitディレクトリをCD-ROMからc:/ApacehGroup/Apache2/htdocs/tendays/にコピー。
早速、コーディング。
3-5.cgi
------------------
#! c:/perl/bin/perl
$COUNTFILE = './count.dat';
$IMGPATH = 'digit/';
$FIGURES = 4;
#カウントファイルの更新
open(FILE,"+<$COUNTFILE") or die("エラー:カウントファイルが開けません");
eval{flock(FILE,2);};
$count = <FILE>;
seek(FILE,0,0);
print FILE ++$count;
close(FILE);
#カウント数の整形
$digit = sprintf("%0${FIGURES}d",$count);
#サーバ出力
print "Content-Type: text/html\n\n";
$i = 0;
while($i < $FIGURES) {
$n = substr($digit,$i,1);
print "<img src=\"$IMGPATH$n.png\" alt=\"$n\">\n";
++$i;
}
------------------
3-5.shtml
------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>SSIあくせすかうんたー</title></head>
<body>
<p>あなたは……
<!--#exec cgi="3-5.cgi" -->番目の訪問者です。</p>
</body>
</html>
------------------
http://127.0.0.1/tendays/3-5.shtml 実行!
成功!
こんな感じ
成功成功!
今回のポイント
http://127.0.0.1/tendays/3-5.shtml
SSIにより、CGIスクリプトが実行されている。
3-5.shmlのここね。ここ。
<!--#exec cgi="3-5.cgi" -->
3-5.cgiを呼び出しているだね。
3-5.cgiでは、ここがポイント。
ファイルを開いた後のここ。
#カウント数の整形
$digit = sprintf("%0${FIGURES}d",$count);
変数FIGURESは4だから。
$digit = sprintf("%04d",$count);
$countを513とすると。
sprintf関数で整形すると、0513になる。
つまり、$digitは0513
第2のポイントは、ここ。
$i = 0;
while($i < $FIGURES) {
$n = substr($digit,$i,1);
print "<img src=\"$IMGPATH$n.png\" alt=\"$n\">\n";
++$i;
}
substr関数で変数$digitから文字抜き出している。
例えば変数$digitが0513の場合。
$FIGURESが4だからループの回数は、4回。
1回目ループで、$nは0
print "<img src=\"$IMGPATH$n.png\" alt=\"$n\">\n";が実行され0が表示される。
2回目ループで、$nは5
print "<img src=\"$IMGPATH$n.png\" alt=\"$n\">\n";が実行され5が表示される。
3回目ループで、$nは1
print "<img src=\"$IMGPATH$n.png\" alt=\"$n\">\n";が実行され1が表示される。
4回目ループで、$nは3
print "<img src=\"$IMGPATH$n.png\" alt=\"$n\">\n";が実行され3が表示される。
以上、おしまい。