CGI-BBS > アクセスカウンタ > バイナリカウンタ > カウンタ値が0になる


カレッヂ
カレッヂ


質問者 山崎  投稿日 4/10(火) 03:34:55
画像合成型SSIカウンタ (gdcount)を利用しています。
一日あたりの訪問者は3500人ほどですが
月に3,4回カウンタ値が0になってしまいます。

http://www.rescue.ne.jp/
は一日1万人程の訪問がありますが、カウンター値のリセットは見た事がありません。

設置方法のミスでしょうか?
回答者 羊相談員  [削除]  投稿日 4/11(水) 11:56:09
このサイトで実際に使われているカウンタと
ここで無料配布されているカウンタは同じものではないかもしれません。

データの消失を防ぐファイルロック処理は
凝ろうと思えばかなり強固なファイルロック機構を作ることもできますが
その反面、一部のサーバでしか使用できないという欠点を招くこともあります。
そのようなカウンタを無料配布すれば「設置できない」という苦情が殺到するため
強固なファイルロック機構を持ったカウンタは配布していないのかもしれません。


#上記の文章は全部推測です。
質問者 山崎  [削除]  投稿日 4/11(水) 21:24:22
そうですか....あきらめます
回答者 しあわせのツボ  [削除]  投稿日 4/11(水) 22:15:37
ここでも「飛ばない(ファイルロックに頼らない)カウンタ」を公開していたと記憶しています。
ちょっと探してみましたが見つからなかったので、何らかの理由で引っ込められたのかもしれません。

「アクセスがあるたびに1バイトずつ追記していき、ファイルサイズを取得することでカウンタ値を得る」という、簡単な方法でしたので、ちょっと頑張って改造することは可能だと思います。
ただし、100万アクセスあれば100万バイト=約1MBを消費しますので、カウンタがよく飛ぶほどのアクセスがあるのであれば、無視できないデメリットです。
回答者 茶々丸  [削除]  投稿日 4/12(木) 00:47:57
gdcount.pl を見てみましたが、
-----------------------------------------------------------------
sub file_lock { #LOCK#

        local($retry) = 3; #LOCK#
        while (!symlink(".", $lockfile)) { #LOCK#
                if (--$retry <= 0) { print "BUSY"; unlink($lockfile); exit; } #LOCK#
                sleep(1); #LOCK#
        } #LOCK#
} #LOCK#
-----------------------------------------------------------------
この symlink に失敗した時、特に条件もつけずに unlink($lockfile) と強制解除してしまうのはまずいのではないでしょうか?
回答者 しあわせのツボ  [削除]  投稿日 4/12(木) 23:55:28
「3回やってみてダメなら」という条件がついてますが。
この処理を外すと、何かの拍子に「ロックファイルを消す」処理がされなかった時、デッドロックを起こします。
「3回」を5回とか10回とかに増やせばカウンタが飛ぶ危険は減るでしょうが、正しくカウントアップされなくなることが増えると思います。
あとはそのあたりのトレードオフです。
質問者 山崎  [削除]  投稿日 4/13(金) 13:41:37
みなさんご回答ありがとうございます。
参考にしていろいろ試してみます。

このページは終了したので返信(回答)は書きこめません

Web裏技