веб-счетчики в файлах?

#php #hitcounter

#php #счетчик посещений

Вопрос:

Как мне хранить счетчики в php-скрипте без DB? Всегда использовал DB, но теперь я хочу более простую конфигурацию… Использование файлов кажется проблематичным из-за блокировок файлов. Допустим, существует много одновременных подключений, и я хочу подсчитать количество выполнений скрипта.

Комментарии:

1. хорошо, кажется, что решение состоит в том, чтобы работать с файлами при небольших нагрузках и работать с БД при высоких нагрузках

Ответ №1:

Вы не хотите использовать базу данных и не хотите использовать файл. Я не думаю, что этого можно достичь, не используя ни один из них.

Комментарии:

1. Я полагаю, если бы вы были очень эксцентричны, вы могли бы использовать локальное хранилище HTML5 для хранения номера на всех клиентских компьютерах, а также сохранить его в memcache. Каждый раз, когда запускается этот скрипт, проверяется значение localStorage (конечно, путем вызова AJAX), которое, как мы надеемся, будет меньше кэшированного значения. Если кэшированное значение меньше, то значение кэша заменяется значением, хранящимся в локальном хранилище. Базы данных или файлы (на сервере) не используются. Как это для нестандартного мышления? 😉

2. @JulianH. Я хорошая идея. Но это перебор для такой простой задачи.

3. действительно, перебор. и если бы у меня был memcache, я бы тоже мог использовать mysql

4. О, определенно перебор… просто опровергал ваше «не думаю, что это возможно» в вашем ответе 🙂

Ответ №2:

Вы можете увеличить кэшированное значение в памяти, используя что-то вроде memcache. Это, вероятно, самое быстрое решение проблемы параллелизма.

Memcache или APC

Конечно, вы потеряете данные, если memcache будет очищен или перезапущен … сохранение файла в какой-то момент — единственный способ.

Комментарии:

1. я хотел бы иметь максимально простое решение для развертывания, чтобы оно работало даже на общем хостинге. итак, в основном это похоже на mysql или files, поскольку даже sqlite зависит от платформы

2. @EugeneShaineMednikov Может быть, вам следовало включить эти спецификации в свой первоначальный вопрос? Это довольно ограничивает.

Ответ №3:

 <?php
$count_file = "counts.txt";
$counts = file($count_file);
$counts[0]   ;
$fp = fopen($count_file , "w");
fputs($fp , "$counts[0]");
fclose($fp);
echo $counts[0];
?>
  

Ответ №4:

Я хочу подсчитать количество выполнений скрипта

Настройте каталог, в который вы можете записывать. Для каждого запроса создайте новый файл со случайным именем.

Вы подсчитываете количество выполнений скрипта, подсчитывая количество файлов.

Если вы выполняете random с низкой частотой столкновений, вы не потеряете количество или только очень, очень мало. Если вы знаете характеристики случайного источника и хэш-функции для имени файла, вы даже можете статистически сказать, сколько счетчиков вам нужно добавить.

Комментарии:

1. Хорошо, это не так тривиально, мне нужно хранить статистику, а не только количество файлов, например, будет несколько счетчиков. Хорошо, допустим, я могу использовать папку для каждого счетчика в день. Но 100k файлов в день повредит гораздо больше, чем блокировка файлов).

2. Каждые 10 минут запускайте задание через cron, которое получает список созданных файлов, подсчитывает их, удаляет и увеличивает это количество внутри другого файла. Поскольку он запускается только каждые десять минут, он не столкнется с проблемами блокировки файлов. Вы решили свою проблему. Инкапсулируйте общий метод в класс, чтобы позже вы могли заменить его базой данных и т. Д.

3. а если у меня нет cron? хорошо, допустим, мне все равно нужно будет решить проблему cron. Я думаю, что это решение будет хуже при чтении, так как в то же время мне нужно увеличить счетчик, мне нужно также прочитать несколько счетчиков, и я считаю, что подсчет количества файлов в папках происходит медленнее, чем чтение строки из небольшого файла.

4. Решение вашего вопроса в любом случае называется database . Мой ответ — это всего лишь предложение, если вы хотите считать на основе файлов, как вы можете предотвратить блокировку файлов. Вот и все. Вам все равно нужно выбрать решение, и у каждого из них тоже есть свои недостатки: база данных: вы не хотите. Счетчик-файл: останавливается при блокировке. Мое предложение: больше работы.