1
我使用下面的代碼:基本的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);
}
這工作正常,但不時說每3-4周的計數器將突然說1548到53(只是一個例子而不是字面的數字)下降 - 任何有想法的人爲什麼會發生這種情況?
錯誤日誌顯示:
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 2011-12-19 09:46:16
可能的重複[如何保持此計數器重置爲100,000?](http://stackoverflow.com/questions/5250118 /如何對保本 - 抗衡來自-正在重置-AT-100-000) – SSpoke 2014-05-30 23:15:52