ここでは画像を使ったカウンターの解説をしていきます。

画像のファイル名を0.1.2.3・・・として拡張子を合わせればどの画像でも大丈夫です。
phpソースコード
<?php
// 重複 true / false ・ 重複させる / 重複させない
$duplicationFlg = false;
// テキストファイルパス
$counterTxt = 'counter.txt';
// カウンター桁数
$counterLngth = 6;
// ipアドレス配列
$arrIp = array();
// ipアドレスを数値に変換
$remoteAdddr = ip2long($_SERVER["REMOTE_ADDR"]);
// 読み込み
$fp = fopen($counterTxt, 'r+');
if ($fp) {
if (flock($fp, LOCK_EX)) {
$line = explode(',', fgets($fp));
}
else {
echo "Eroor";
}
}
ftruncate($fp, 0);
fseek($fp, 0);
$date = $line[0];
$cnt = $line[1];
if ($date == date('Y-m-d')) {
for ($i = 2; $i < count($line); $i++) {
$arrIp[] = $line[$i];
}
}
if (empty($arrIp[0])) {
$arrIp[] = $remoteAdddr;
$cnt++;
}
else {
foreach ($arrIp as $val) {
if ($remoteAdddr == $val) {
$flg = false;
break;
}
else {
$flg = true;
}
}
if ($flg) {
$arrIp[] = $remoteAdddr;
$cnt++;
}
}
// 書き込み
if ($fp) {
$ip = implode(',', $arrIp);
if ($duplicationFlg) {
fwrite($fp, date('Y-m-d').','.$cnt);
}
else {
fwrite($fp, date('Y-m-d').','.$cnt.','.$ip);
}
flock($fp, LOCK_UN);
fclose($fp);
}
$n = sprintf("%0".$counterLngth."d", $cnt);
if (strlen($n) <= $counterLngth) {
for ($i = 0; $i < strlen($n); $i++) {
echo "<img src='img/".substr($n, $i, 1).".gif' />";
}
}
else {
for ($i = 0; $i < $counterLngth; $i++) {
echo "<img src='img/9.gif' />";
}
}
counter.txt
日付、カウント、ipアドレスを記録しておくファイルcounter.txtを作成します。
(パーミッション読み書き可能にしてください)
counter.txtには最初
2013-07-10,0
と記述して下さい。
コンマの左、日付は自動で拾って上書きされるので2013-01-01の形式で大丈夫です。
コンマの右、カウントです。この数値からカウントが始まります。
解説
$duplicationFlg = false;(4行目)
trueなら重複してカウントします。
falseなら日付で区切りipアドレスを元に重複をはじきます。
$counterTxt = ‘counter.txt’;(6行目)
counter.txtを作成した場所を記述して下さい。
counter.txtは読み書き可能なパーミッションに変更してください。(666)など
$counterLngth = 6;(8行目)
カウンターの桁数を設定してください。
カウンターを表示する際0詰めで表示されます。
ftruncate($fp, 0);(24行目)
ファイルの上書きをするので、上書き前のデータを削除します。
ファイルサイズを0バイトにしています。
fseek($fp, 0);(25行目)
ファイルの書き込み位置を最初にしています。
echo “<img src=’img/”.substr($n, $i, 1) . “.gif’>”;(71行目と76行目)
カウンター画像を設置した場所、画像の拡張子を指定してください。
