FC2ブログ

チマチマの課題-予定外のアクセスカウンタ

   プログラミング [2011/07/05]
昨日も書いたのですが、HPのアクセスカウンタなどで使わせてもらっていた「COOL ONLINE」がサービスを止めてしまった。

なので、新しいカウンタを提供してくれるところを捜そうか・・・・・
と思ったのですが、カウンタごときで、あっちこっち行ったりきたりするのも面倒なので、自分で準備しました。
PHPで。
当然、さるなので、参考サイトのものまねですよ。
ここPHP入門サイトを参考にさせていただきました。

できたのは、こんなソースです。


<?php
//*****************************************************************************
// title: アクセスカウンタ
// file: mycounter.php
// note: セッションにパスがセットされていなかったらカウントアップ
// parameter $_SESSION["countupword"] カウントアップ済みのパス
// coder: by sarumosunaru
// history: 2011/07/04
//*****************************************************************************
define("FONT_TYPE", 4);
define("DSP_RATE", 1.5);
define("AIKOTOBA", "appu-simasita");

session_start();

//****カウンタファイルをオープン
$cntfp = fopen("SARUcount.txt", "r+");
if ($cntfp != false)
{
  //***カウントを読み込む。
  $icount = intval(fgets($cntfp, 128));
  fseek($cntfp, 0, SEEK_SET);
}
else $icount = 0;

//合言葉を確認して、未設定ならカウントアップ
if ($_SESSION["countupword"] != AIKOTOBA)
{
  $icount++;
  //****合言葉を設定
  $_SESSION["countupword"] = AIKOTOBA;
}

//****新しいカウントを保存
if ($cntfp != false)
{
  fprintf($cntfp, "%d\r\n", $icount);
  fclose($cntfp);
}

//****カウンタを文字列に
$countstr = sprintf("%08d", $icount);

//***基準の文字の幅、高さを調べる
$fontwid = imagefontwidth(FONT_TYPE);
$fonthei = imagefontheight(FONT_TYPE);

header("Content-Type: image/png");
//****描画用画像リソース作成(画像の幅、高さ)
$srcimg = imagecreate($fontwid*10, $fonthei+4);
//****背景色の作成(最初にallocateすると背景色になるらしい)
$bgcolor = imagecolorallocate($srcimg, 0x00, 0x00, 0x00);
//****文字色の作成
$fontcolor = imagecolorallocate($srcimg, 0x00, 0x88, 0x22);

$start_x = $fontwid;
$start_y = 2;
//****カウント文字列の描画(画像、フォントタイプ、x,y、文字列、文字色)
imagestring($srcimg, FONT_TYPE, $start_x, $start_y, $countstr, $fontcolor);
//****出力用画像リソース作成(画像の幅、高さ)
$dstimg = imagecreate((imagesx($srcimg))*DSP_RATE, (imagesy($srcimg)*DSP_RATE));
//****画像のコピー(コピー先画像、元画像、先x,y、元x,y、先w,h、元w,h)
imagecopyresized($dstimg, $srcimg,
        0,0,0,0,
        imagesx($dstimg), imagesy($dstimg),
        imagesx($srcimg), imagesy($srcimg));

//****イメージデータのPNGとしての出力
imagepng($dstimg);
//****画像リソースの廃棄
imagedestroy($srcimg);
imagedestroy($dstimg);
?>



でも、前のカウンタがどんくらいだったのか分からないので、適当に初期値設定しちゃいました。
自作の特権ですよね。

あーくたびれた。
今日はこの辺で。m(__)m

後日、見栄えの点で少し変更しました。続きがあります。
アクセスカウンタって、割と難しいんですね。

『「再読み込み」とかでカウントアップすると、なんだか本当の「訪問者数」にならないなー』とか思ったので、
「セッション」に決まった言葉をセットしておいて、それを持ってたら「カウントアップしない」としてたのです。
が、そもそも「セッション」の継続性って、ブラウザ側(クッキー)の設定に左右されるみたいで、
「再読み込み」でカウントアップしたり、しなかったりしますね。

でも、まあ正確な訪問者数を把握したいわけでもなくて、
「いっぱい来た」「あんまり来てない」くらいが分かればいいし、
バンバン カウントアップされた方が景気がいい気がするので、このままにしちゃいます。

本当に、クッキーの設定に左右されないものを作ろうと思ったら、USERDOMAIN/USERNAMEをある一定時間サーバ側に保持って、毎回そのリストの中に無いか捜すとか必要なのかも。

で、見た目が地味だったので、番号画像パーツを張り合わせて1個のPNGとして出力するように変更してみました。

なんちゃってカウンタですが、サンプルソース一式は、ここからダウンロードいただけます。よろしければどうぞ。




<?php
//*****************************************************************************
// title: アクセスカウンタ
// file: mycounter.php
// note: セッションにパスがセットされていなかったらカウントアップ
// parameter $_SESSION["countupword"] カウントアップ済みのパス
// coder: by sarumosunaru
// history: 2011/07/04
//*****************************************************************************
//define("FONT_TYPE", 5);         //文字タイプ
define("DSP_RATE", 1);         //最終倍率
define("PIECE_W", 24);         //番号画像幅
define("PIECE_H", 31);         //番号画像高さ
define("NUM_WID", 6);         //表示桁数
define("AIKOTOBA", "appu-simasita");

session_start();

//****カウンタファイルをオープン
$cntfp = fopen("SARUcount.txt", "r+");
if ($cntfp != false)
{
  //***カウントを読み込む。
  $icount = intval(fgets($cntfp, 128));
  fseek($cntfp, 0, SEEK_SET);
}
else $icount = 0;

//合言葉を確認して、未設定ならカウントアップ
if ($_SESSION["countupword"] != AIKOTOBA)
{
  $icount++;
  //****合言葉を設定
  $_SESSION["countupword"] = AIKOTOBA;
}

//****新しいカウントを保存
if ($cntfp != false)
{
  fprintf($cntfp, "%d\r\n", $icount);
  fclose($cntfp);
}

//****カウンタを文字列に
$countstr = sprintf("%0".NUM_WID."d", $icount);

//***基準の文字の幅、高さを調べる
//$fontwid = imagefontwidth(FONT_TYPE);
//$fonthei = imagefontheight(FONT_TYPE);

//****画像のレスポンス時ヘッダ
header("Content-Type: image/png");
//****描画用画像リソース作成(画像の幅、高さ)
//$srcimg = imagecreate($fontwid*10, $fonthei+4);
$srcimg = imagecreate(PIECE_W*NUM_WID, PIECE_H);


//****背景色の作成(最初にallocateすると背景色になるらしい)
$bgcolor = imagecolorallocate($srcimg, 0x00, 0x00, 0x00);
//****文字色の作成
//$fontcolor = imagecolorallocate($srcimg, 0x00, 0x88, 0x22);

//$start_x = $fontwid;
//$start_y = 2;
$start_x = 0;
$start_y = 0;
//****カウント文字列の描画(画像、フォントタイプ、x,y、文字列、文字色)
//imagestring($srcimg, FONT_TYPE, $start_x, $start_y, $countstr, $fontcolor);
for ($i=0; $i<NUM_WID; $i++)
{
  $num = substr($countstr, $i, 1);
  $numimg = imagecreatefrompng("image/".$num.".png");
  imagecopyresized($srcimg, $numimg,
        $start_x, $start_y, 0, 0,
        imagesx($numimg), imagesy($numimg),
        imagesx($numimg), imagesy($numimg));
  $start_x += imagesx($numimg);
  imagedestroy($numimg);
}

//****出力用画像リソース作成(画像の幅、高さ)
$dstimg = imagecreate((imagesx($srcimg))*DSP_RATE, (imagesy($srcimg)*DSP_RATE));
//****画像のコピー(コピー先画像、元画像、先x,y、元x,y、先w,h、元w,h)
imagecopyresized($dstimg, $srcimg,
        0,0,0,0,
        imagesx($dstimg), imagesy($dstimg),
        imagesx($srcimg), imagesy($srcimg));

//****イメージデータのPNGとしての出力
imagepng($dstimg);
//****画像リソースの廃棄
imagedestroy($srcimg);
imagedestroy($dstimg);

?>
スポンサーサイト





コメントの投稿

非公開コメント

カレンダー
01 | 2024/02 | 03
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 - -
プロフィール

さるもすなる

Author:さるもすなる
さるです。別HPサイト「さるもすなる」から侵食してきました。 山菜/きのこ、それとタイトルにしたPPバンド籠のことをメインに徒然に・・・・暇を持て余したさるの手仕事:男手芸のブログってことで。

最新記事
最新コメント
月別アーカイブ
カテゴリ
天気予報

-天気予報コム- -FC2-
本家のHPのトップ
山菜や茸の話です
PPバンドの籠作品と作り方です
投稿をお待ちしております



PVアクセスランキング にほんブログ村 にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



検索フォーム
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR