BBRK 01-08-11
ホームページを AIRnetに引っ越して以来ずっと、オリジナルの「アクセスログ + カウントアップ」スクリプトを使ってきたのですが、これが超い〜加減なスクリプトゆえに今までに何度となく壊れていたんですね(苦笑)
今回のサイト移動を機に、アクセスカウンタを壊れにくいものに変更してみました。
1つのスクリプトでアクセスカウンタとアクセスログ記録の両方の処理をしているのですが、データファイルの排他処理を全くしていないため(苦笑)、アクセスが集中する夜間などにたまに壊れたりしていたのです。
壊れるのはデータを書き換える処理をするカウンタファイルの方ばかりで、データを追加処理するだけのログ記録ファイルのほうは一度も壊れたことがありませんでした。
以上の経験則から、カウンタも追記式に変更することにしました。
カウンタで追記式? といってもピンと来ないかたも多いと思いますが、どんな方法かというと、アクセスがあったら、例えば「+」という文字をファイルに追加していく方法です。当然そのカウンタファイルは「+」だらけになり、ぱっと見では何カウントなのだかさっぱりわからないものになります(苦笑)
では、カウント数はどうやって知るのかというと、ファイルのサイズ(bytes)から間接的に知るのです。
この「ファイルサイズを調べる」という処理は、「ファイルをオープンして中の情報を読み出す」のに比べ負荷が軽く、複数ユーザで 1台のサーバを共用しているサイト(って、ほとんどがそう)などには最適な方法だと思います。
どんな記述になるかというと、こんな感じになります(カウンタ部のみ抜粋)。
$counter = 'count.dat'; open(COUNT, ">> $counter") || die; print COUNT "+"; close(COUNT); print -s $counter;
目から鱗ってなひとも少なくはないでしょ?(苦笑)