※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。
後になるほど省略されている場合がありますのでできるだけ順番に読んでください。
また、実行に際しては、サーバーでPHPが利用できる事を前提に解説しています。
■ グラフィック型アクセスカウンタの作成(SSI形式)
次はグラフィック型アクセスカウンタの作成です。
以前、「簡単なテキスト型アクセスカウンタ」の解説をしましたが、それをベースに改造します。
テキスト型はカウンタの値を文字列で表示すればいいだけですが、グラフィックカウンタだと画像を表示しないといけません。
様々な手法が考えられますが、 今回はSSI形式なので比較的簡単な方法を説明してみたいと思います。
それは、各桁の数字を「IMGタグの数字画像を表示」に書き換えてしまう方法です。
注意)SSI形式は、サーバーがSSIを許可していないと使用できません。
ただ、許可していないといいながら使用できる場合もあります。
詳しくは、「HP作成の予備知識」竏秩u13.CGIの結果をHTML文書に埋め込みたい。(SSI)」をご参照下さい。
それと、グラフィックカウンタということなので当然画像が必要になります。
画像は、数字の「0」-「9」に対応した画像 、「0.gif」-「9.gif」が用意されているとします。
これらの画像についてはこのサイトの「フリー素材」にある「アクセスカウンタ」関係から入手すれば簡単でしょう。
- 【 解 説 】
-
カウンタの値は今までと同じ処理なら「$totalc」にセットされてます。
この値を1文字ずつ拾いながら「img」タグを作成して行きます。まずカウンタの桁数は「strlen()」関数を使用して次のような記述で取得する事ができます。
$strlen0 = strlen($totalc);そして、カウンタの1桁目の数字を「$cnt0」という変数にセットするには「substr()」関数を使い、次のように記述します。
$cnt0 = substr($totalc, 0, 1);したがってそのカウンタを1文字ずつ拾う処理は次のように記述できます。
for($scnt0 = 0;$scnt0 < $strlen0;$scnt0++){ $cnt0 = substr($totalc, $scnt0, 1); }取得された「$cnt0」を使用して画像を表示するには、次のように「print」文を使い、「img」タグを出力します。
print "<img src='/images/$cnt0.gif'>";この例では、カウンタ用の画像は「/images」というフォルダに「0.gif」縲怐u9.gif」という名前で入ってるものとします。
さて、このPHPの処理はSSI形式なのでWEBページの好きな位置に記述する事ができます。
今回のPHPスクリプトの名前を「gcnts.php」とし、呼び出しページと同じフォルダに設置した場合、WEBページのソースに次のように記述して呼び出します。
<!--#include virtual="./gcnts.php" -->今回、カウンタのファイル名は「gcntsf.cgi」としました。
このファイル名は何でもいいのですが、セキュリティの意味で拡張子は「.cgi」
にしておくことをお勧めします。このようにしておくと、訪問者がこのファイルを覗こうとした時、自動的にCGIとして実行しようとしますが、中身がCGIではないのでエラーが発生します。
したがって、覗こうとしてもエラーが発生して覗けなくなるからです。
まずこのカウンタを呼び出すためのHTMLページを「gcnts.html」という名前で作成します。
サンプルは次の通りです。
- 【記述サンプル】
- <HTML> <HEAD> <title>グラフィック型アクセスカウンタ(SSI形式)</title> </HEAD> <BODY> 累計のカウント:<!--#include virtual="./gcnts.php" --> </BODY> </HTML>
では、上記の内容を使用して「グラフィック型アクセスカウンタ」を作成してみます。
なお、今回のサンプルでは排他制御(同時書き込み時の制御)は行っていません。
Windows環境の排他制御については「PHPの予備知識」竏秩uファイル書き込みの排他制御」をご参照下さい。
- 【記述サンプル】
- <?php $filnam = "gcntsf.cgi"; $fp = fopen($filnam,"r"); $totalc = fgets($fp); fclose($fp); $totalc = trim($totalc); $totalc++; $filnam = "gcntsf.cgi"; $fp = fopen($filnam,"w"); fputs($fp,"$totalc"); fclose($fp); $strlen0 = strlen($totalc); for($scnt0 = 0;$scnt0 < $strlen0;$scnt0++){ $cnt0 = substr($totalc, $scnt0, 1); print "<img src='/images/$cnt0.gif'>"; } ?>