【发布时间】:2011-12-19 09:44:24
【问题描述】:
我正在使用以下代码:
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
【问题讨论】:
-
因为此代码不是线程安全的,并且您似乎捕捉到文件被部分写入但另一个进程读取它的情况。你需要的是nz.php.net/flock(抱歉懒得写完整样例)