[PHP-users 19888]Re: flock関数による排他ロックについて

HAMAI Kyoichi k-hamai @ pb.jp.nec.com
2004年 1月 14日 (水) 14:44:35 JST


濱井です。
2004/01/14 13:28:44 +0900に川村 耕基さんが送られた
メールに関する返信です。

> レッツPHP!<http://php.s3.to/>さんのところの「昨
>日今日カウンタ」<http://php.s3.to/counter/#dcount>
>を利用させて頂いておりましたが、一日に何度かカウン
>タがゼロリセットされてしまうので、カウンタデータの
>ReadとWrite時にflock関数で排他ロックをするように追
>加しました。
>
>---Read時
>$fp = fopen($log, "r");
>flock($fp, LOCK_EX);
>$dat = file($log);	// ファイルを配列に
>fclose($fp);
>---
>
>---Write時
>$fp = fopen($log, "w");//ファイルに保存
>flock($fp,LOCK_EX);
>fputs($fp, $new);
>fclose($fp);
>---

$fp = fopen($log, "r+");
flock($fp, LOCK_EX);
$dat = file($log);
$new = $dat + 1 ;
fputs($fp, $new);
flock($fp, UN_LOCK);
fclose($fp);

といったロジックでないと意味がないはずです。


> しかし、以前時々ゼロリセットされてしまいます。
>flockで排他ロックをしてもゼロリセットされてしまう
>ということは、もう手の施しようがないということで
>しょうか?

fcloseを実行するとロックは多分、強制解除されると思います。
そうでないと異常終了した場合などに、他のプロセスがアクセス
できなくなります。
上記の処理では、事実上ロックしていないことになります。


PHP-users メーリングリストの案内