SAK 図書館
PHP 基礎編12 - アクセスカウンタ作成、file_exists、sprintf、filesize、header
■アクセスカウンタ作成 (PHP3、PHP4)
・単純なアクセスカウンタは、次のように作成できる。
ファイルロックする代わりにリードエラーチェックで逃げている。
これでも十分に実用になるだろう。
但し、リロード対策は実施していないので、ぽんぽんカウントするカウンタ
ではある。
・ロケーションは、サイトトップの下に counter フォルダを作成し、
その counter フォルダに counter.php と 0 〜 9.gif の画像ファイルを置
くものとしている。画像は適当に容易すればよい。
・カウンタファイルの初期リードエラー対策として、
@fopen("$ctfile", 'r') と @ でエラー抑制している。
1 件目で counter.dat ファイルが counter フォルダに作成される。
<?php
/*
========================================================================
counter.php アクセスカウンタ
========================================================================
*/
// 準備
$ctfile = 'counter.dat';
$imgfld = '.';
$imgtype = 'gif';
// カウンタ参照
$ct = 0;
if (($fno = @fopen("$ctfile", 'r'))) {
$ct = fgets($fno, 32000);
fclose($fno);
}
// 参照エラーチェック
if ($ct == '' || $ct < 1) {
if (file_exists("$ctfile")) exit;
}
// カウンタ加算
if ($col == '1') {
if (($fno = fopen("$ctfile", 'w'))) {
$ct++;
fwrite($fno, "$ct", 32000);
fclose($fno);
}
}
// カウンタ桁位置
$num = substr(sprintf("%09d", $ct), 9 - $col, 1);
// 画像送信
sndimg($num);
// 終了
exit;
/*
========================================================================
sndimg 画像送信
========================================================================
*/
function sndimg($num)
{
global $imgfld, $imgtype;
// 画像リード
if (!($fno = fopen("$imgfld/$num.$imgtype", 'rb'))) exit;
$size = filesize("$imgfld/$num.$imgtype");
$img = fread($fno, $size);
fclose($fno);
// イメージ表示
header("Content-type: image/$imgtype");
print($img);
// リターン
return;
}
?>
・アクセスカウンタの呼び出しは、次のように HTML に組み込む。
IMG タグで呼び出すのが汎用性があって良いだろう。
最長 9 桁まで指定できる。
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>アクセスカウンタテスト</TITLE>
</HEAD>
<BODY>
<P>アクセスカウンタテスト</P>
<IMG src="counter/counter.php?col=6" border="0">
<IMG src="counter/counter.php?col=5" border="0">
<IMG src="counter/counter.php?col=4" border="0">
<IMG src="counter/counter.php?col=3" border="0">
<IMG src="counter/counter.php?col=2" border="0">
<IMG src="counter/counter.php?col=1" border="0">
</BODY>
</HTML>
■PHP 基礎編資料
■PHP + MySQL 編資料
■CGI-Perl 基礎編資料
■CGI-Perl 基礎実地編資料
■CGI-Perl 応用実地編資料