Доброго дня! Переписал текстовый счетчик для подсчета просмотров статей на сайте. Раньше все счетчики хранились в одном файле, но при большой нагрузке возникали моменты что одновременно его открывали несколько юзеров и счетчик попросту обнулялся (блокировка не спасала). Теперь к каждой статье создается свой счетчик с именем id статьи. Вот его примитивный код.
| Код | <?php
$log="counter_id.dat"; //название файла по id статьи
if(file_exists($log)){
$open=@fopen($log,'r+'); $counter=@fread($open,filesize($log)); @fclose($open); $counter++; $write=fopen($log,'w'); flock($write, LOCK_EX); fputs($write,$counter); flock($write, LOCK_UN); fclose($write);
}else{ $open=@fopen("$log",'w'); flock($open, LOCK_EX); $counter = 1; fputs($open,$counter); flock($open, LOCK_UN); fclose($open);
} echo $counter;
?>
|
Это не удобно, потому как текстовые файлы создаются в той же директории что и сами скрипты. Решил сделать так чтобы все файлы создавались в отдельной папке (в моем случае dir). Но не чего не работает . Опыта работы с папками очень мало, решил обратиться за помощью к вам. Вот мой кривой код:
| Код | <?php $log="counter_id.dat"; //название файла по id статьи
if ($directory = opendir('./dir/')) {
while (false !== ($file = readdir($directory))) {
if(basename("$file" === "$log")){ $open=@fopen($log,'r+'); $counter=@fread($open,filesize($log)); @fclose($open); $counter++; $write=fopen($log,'w'); flock($write, LOCK_EX); fputs($write,$counter); flock($write, LOCK_UN); fclose($write);
}
else{
$open=@fopen("$log",'w'); flock($open, LOCK_EX); $counter = 1; fputs($open,$counter); flock($open, LOCK_UN); fclose($open);
}
}
closedir($directory); } ?>
|
|