PHP
Счетчик на PHP: простой счетчик просмотров страницы
Короткий ответ: простой счетчик просмотров на PHP можно хранить в файле. При каждом открытии страницы PHP читает число, увеличивает его на 1, сохраняет обратно и выводит результат
Такой счетчик подходит для учебного проекта. Для настоящей аналитики лучше использовать базу данных или систему аналитики, потому что файловый счетчик не различает пользователей, ботов, обновления страницы и кеширование
Структура проекта
counter-test/
index.php
counter.txt
В файле counter.txt сначала напишите
0
Простой счетчик
index.php
<?php
$counterFile = __DIR__ . '/counter.txt';
$views = (int) file_get_contents($counterFile);
$views++;
file_put_contents($counterFile, (string) $views);
?>
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Счетчик на PHP</title>
</head>
<body>
<h1>Страница со счетчиком</h1>
<p>Просмотров: <?php echo $views; ?></p>
</body>
</html>
Откройте страницу несколько раз. Число должно увеличиваться
Более аккуратный вариант с блокировкой
Если два пользователя откроют страницу одновременно, простой вариант может записать неправильное число. Для учебного улучшения используем flock()
<?php
function incrementCounter(string $file): int
{
if (!file_exists($file)) {
file_put_contents($file, '0');
}
$handle = fopen($file, 'c+');
if ($handle === false) {
return 0;
}
flock($handle, LOCK_EX);
$contents = stream_get_contents($handle);
$views = (int) $contents;
$views++;
ftruncate($handle, 0);
rewind($handle);
fwrite($handle, (string) $views);
flock($handle, LOCK_UN);
fclose($handle);
return $views;
}
$views = incrementCounter(__DIR__ . '/counter.txt');
Этот код блокирует файл на время записи, чтобы несколько запросов не мешали друг другу
Как вывести счетчик красиво
<p class="counter">
Просмотров страницы: <?php echo $views; ?>
</p>
<style>
.counter {
display: inline-block;
padding: 10px 14px;
border-radius: 8px;
background: #eef2ff;
color: #312e81;
font-weight: 700;
}
</style>
PHP считает, HTML и CSS показывают результат
Почему счетчик может не работать
Если файл не обновляется, проверьте права на запись. PHP-процесс должен иметь возможность записывать в counter.txt или в папку, где файл создается
На локальном сервере это обычно проще. На хостинге права могут отличаться, особенно если файл создан через FTP одним пользователем, а PHP работает от другого
Ограничения файлового счетчика
Такой счетчик увеличивается при каждом запросе. Он не понимает, что пользователь просто обновил страницу, не фильтрует ботов и не хранит историю по дням. Для маленького учебного блока это нормально, но для сайта лучше делать статистику через базу или аналитику
Мини-практика
Создайте счетчик для двух страниц: index.php и about.php. Для каждой страницы используйте отдельный файл счетчика: counter-index.txt и counter-about.txt. Проверьте, что просмотры считаются независимо
Частые ошибки
Файл counter.txt не существует Создайте его заранее или добавьте проверку file_exists()
Нет прав на запись PHP должен иметь возможность менять файл счетчика
Счетчик считают аналитикой Это учебный счетчик просмотров, а не полноценная статистика посещаемости
Не используют блокировку при записи При одновременных запросах без flock() возможны некорректные значения
Что почитать дальше по PHP
Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:
- PHP-чат своими руками: простой учебный пример без фреймворка
- Telegram-бот на PHP: простой бот через Bot API
- Composer в PHP: установка пакетов без ручного копирования
- Joomla: как убрать index.php из адреса сайта