【PHP】質問スレッドpart25【php】

このエントリーをはてなブックマークに追加
60 ◆.jC7ANgFY.
質問させていただきます。カウンターを設置しているのですが、
ロックもちゃんとできているはずなのにカウンターが崩壊して
しまいました。flockでは不完全なことがあるのでしょうか。
環境はFreeBSD 4.10-RELEASE[i386] + Apache/1.3.29 + PHP/4.3.6です。
アクセスログから得られる当時の状況としては
1秒に30回上がる状況でした。

$log = './counter.dat';
$fn = fopen($log, 'r+');
if (flock($fn, LOCK_EX)) {
$cnt = unserialize(fread($fn, filesize($log)));
define('UNIX_DAY', intval((intval(time() / 3600) + 9) / 24));
if ($cnt['day'] == UNIX_DAY) {
$cnt['tdy']++; $cnt['cnt']++;
} else {
$cnt['day'] = UNIX_DAY; $cnt['yes'] = $cnt['tdy'];
$cnt['tdy'] = 1; $cnt['cnt']++;
}
ftruncate($fn, 0); rewind($fn);
fwrite($fn, serialize($cnt));
}
fclose($fn);