画像カウンター作って見た

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

counter

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください