アクセスカウンタ

 トップページにアクセスカウンタを設置していますが、これだとトップページのみのアクセスをカウントしていることになります。実際のアクセスは、google の検索から来たりするので、必ずしもトップページから訪問しているとは限りません。なお、このブログを投稿する内部ネットワークからのアクセスはカウントしていません。

 google のインデックスの様子を見ると、どちらかと言うとブログの方のアクセスが多いように思います。そこで、カウンタのプログラムを修正して、全てのページにカウンタを設置してカウントするようにしました。トップページ以外では、カウント数の表示はしません。

 WordPress のウィジェットで概要を表示していますが、ここでカウンタを呼び出すことにしました。トップページでは、iframe タグを使ってアクセス数を表示しているので、ここでも iframe タグを使ってみたら、ページの読み込みが完了しなくなってしまいました。うん、iframe はちょっと邪道と認識しているのでこの動きに不満はありません。

 しかし、そうするとどうやって PHP を呼び出すかということになります。こういった場合によく使われるのが、img タグです。特に訪問者に気づかれないように cgi を動かすのに、1×1 のサイズの画像表示が使われます。まず気づかれません。決して悪いことに使わないようにしてください。まあ、ページのソースをチェックすればバレると思います。

 カウンタの PHP を、GET データがある場合は、1×1 の画像として振る舞うように修正しました。WordPress のウィジェット内で、img タグを使って呼び出しました。今度は読み込みが完了しました。

 トップページ以外では、この 1×1 の画像を表示する img タグを全てのページに入れました。画像を生成するコードは次のようになります。

    $img = pack( "c*",
                  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00,
                  0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00,
                  0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00,
                  0x00, 0x00, 0x25, 0xdb, 0x56, 0xca, 0x00, 0x00, 0x00,
                  0x03, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0xa7,
                  0xc4, 0x1b, 0xc8, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48,
                  0x59, 0x73, 0x00, 0x00, 0x0e, 0xc4, 0x00, 0x00, 0x0e,
                  0xc4, 0x01, 0x95, 0x2b, 0x0e, 0x1b, 0x00, 0x00, 0x00,
                  0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0x99, 0x63, 0x60,
                  0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xf4, 0x71, 0x64,
                  0xa6, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
                  0xae, 0x42, 0x60, 0x82 );
    header("Content-type: image/png");
    header("Cache-control: no-cache");
    echo $img;
    exit;

 ちなみに、カウントしているのは、IP アドレスでカウントするので、PV(ページビュー)ではなく訪問者数です。

web サイト

Posted by sirius