今日の授業で、アクセスカウンターを完成させます。


グラフィカルなカウンタを作ります。


今までは、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が表示される。



以上、おしまい。