2009/02/14

カウンター製作日記 #2


サーバーの都合で設置できていないが。
ということで、ここですこし中身をさらしてみる。

全体の流れとして、こんな感じになっている。
データベースから、値を読み込む。

今日、一度目の訪問かチェック。一度目なら、カウントアップ

XMLで出力。

そして、登録制にしていて、いくつかのカウンタを作ることができる仕様。
ところどころに出てくるIDは、ユーザーID的なもの。

まずは最後のXML出力で、XMLSerializer使ったあたり。XML出力は、betaだけどこれが一番楽。

$options = array(
'indent' => "\t", //インデントに使う文字
'encoding' => 'utf-8', //エンコーディング
'rootName' => 'counter', //ルートの要素名
'rootAttributes' => array( //ルートの属性
'id' => $this->id
),
'addDecl' => true, //<?xml version="1.0"?>タグを付けるか
'returnResult' => true //serializeメソッド実行時にXMLを返すか
);
//str_pad(文字列, 文字数, 文字, オプション);
//指定された文字数になるまで、文字列に文字を追加する。
//STR_PAD_LEFTは、左側を文字で埋める、という意味。
$output = array(
'count' => str_pad($this->count, $this->digit, '0', STR_PAD_LEFT),
'today' => str_pad($this->today, $this->digit, '0', STR_PAD_LEFT),
'yesterday' => str_pad($this->yesterday, $this->digit, '0', STR_PAD_LEFT)
);
$serializer = new XML_Serializer($options); //オプションを指定して、XML_Serializeを作成
return $serializer->serialize($output); //配列をXMLで出力



こんな感じに実装している。

$this->countと$this->todayと$this->yesterdayは、名前のとおりのカウント数が入っている。


はずであったが、todayとyesterdayはまだ未実装。



$this->idは、受け取ったIDを出力しているだけ。



つぎに、「今日一度目の訪問」あたり、PEAR/Dataで翌日0時のUNIX時を取得する。




$d = new Date();
$d->hour = 0;
$d->minute = 0;
$d->second = 0;
$d->partsecond = 0.0;
return $d->getNextDay()->getTime();



うん。そのままだね。

時間、分、秒、を0にして、翌日を取得している。



最後に、カウントアップSQL。




UPDATE counter SET count = count + 1 WHERE MD5(id) = ?



MySQL前提で考えているのだが、こんな感じ。

SQLでカウントアップもしてしまおうという魂胆。


オーバーフローとか考えるのが面度かった。



 



最近、ねたはあるのだが、書く時間と気力がない・・・。

0 件のコメント: