PHPのカウンタを導入して以来、頻繁にカウンタがゼロに戻ってしまいます。以前のCGIカウンタは強固でしたが、PHPのflock関数というのは弱いのでしょうか。壊れる仕組みを勉強したいのと、もしあればバックアップを持つPHPカウンタをお教え願えないでしょうか。CGIではバックアップを持ち、自動復旧するものもあるようです。自分で見つけたのは以下のカウンタです

http://vain.velvet.jp/index.php?tb=1&no=99
これはファイルサイズを利用しているもので、ちょっとサーバー容量的に厳しいのです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/02/23 14:02:14
  • 終了:--

回答(1件)

id:dev_zer0 No.1

dev_zer0回答回数332ベストアンサー獲得回数252005/02/23 15:02:18

ポイント40pt

ロック形式の違いと、flock以外の対応方法です。

PHPのロックは基本的に他の言語と変わらない強度を持っているはずです。

しかし、誤った使い方をしていると壊れる可能性はあります。下記に例を示します。

<?php

$file = @fopen(”log.cgi”,”r+”) or die(”ファイルの読み込み失敗”);

flock($file, LOCK_EX);

$cnt = fgets($file);

flock($file, LOCK_UN);

$cnt++;

flock($file, LOCK_EX);

rewind($file);

fputs($file, $cnt);

flock($file, LOCK_UN);

fclose($file);

echo $cnt;

?>

上記のソースは読み/書きの間にロックを解除してしまう誤った使い方の典型例です。

open後にロックし、close前にロック解除するのが正しい使い方です。

また、flock自体が無意味な場合もあります

・そもそもロックという概念がないOS上で動作している(例:Win98)

・マルチスレッドで動作している

上記のような場合は別の対策を練る必要があります。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません