Базовый счетчик посещений PHP теряет хиты так часто? - PullRequest
1 голос
/ 19 декабря 2011

Я использую следующий код:

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

1 Ответ

1 голос
/ 19 декабря 2011

Параметр длины должен быть больше 0

Ну, это так?

Если размер файла не удается, возвращается false. Ложь оценивается как 0.

размер файла может не получиться, если файл не может быть прочитан в данный момент. Я полагаю, что это может произойти, если у вас есть два одновременных хита. Один из них пишет файл, а другой пытается прочитать его. Другая возможность может состоять в том, что размер файла может быть прочитан , но это 0, потому что другой посетитель открыл файл, но еще не записал новое значение.

Таким образом, чтобы обойти это, вы должны применить блокировку к файлам, лучше обработать и проверить коды результатов этих функций или, возможно, лучше: переместить хранилище в базу данных.

...