私は、次のコードを使用しています:基本的なPHPヒットカウンタは、頻繁にヒットを失いますか?
if (file_exists('count_file.txt'))
{
$fil = fopen('count_file.txt', r);
$dat = fread($fil, filesize('count_file.txt'));
echo $dat+1;
fclose($fil);
$fil = fopen('count_file.txt', w);
fwrite($fil, $dat+1);
}
else
{
$fil = fopen('count_file.txt', w);
fwrite($fil, 1);
echo '1';
fclose($fil);
}
これは正常に動作しますが、すべてはそれほど頻繁にヒットカウンタが突然53に1548と言うから(一例に過ぎないリテラル番号)をドロップします3~4週間と言います - なぜこれが起こっているのか、アイデアを持っている人は誰ですか?
エラーログを示しています
PHP Warning: fread() [<a href='function.fread'>function.fread</a>]: Length parameter must be greater than 0 in /my/home/dir/www.mysite.com/count.php on line 6
このコードはスレッドセーフではないので、ファイルが部分的に書き込まれているが別のプロセスがそれを読み込んでいるようなケースをキャッチするようです。必要なのはhttp://nz.php.net/flockです(完全なサンプルを書くのはあまりにも怠惰です) – zerkms
[このカウンタを100,000でリセットしないようにするには?](http://stackoverflow.com/questions)/5250118/how-to-keep-this-counter-from-reseting-at-100-000) – SSpoke