ここでは画像を使ったカウンターの解説をしていきます。
画像のファイル名を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行目)
カウンター画像を設置した場所、画像の拡張子を指定してください。