Короткий ответ: для учебного сайта можно записывать посещения в JSON-файл: время визита, адрес страницы, IP и user agent. Затем отдельная страница может читать этот файл и показывать последние посещения. Для реального сайта лучше использовать базу данных или профессиональную аналитику
Сразу важное ограничение: такая статистика не должна собирать лишние персональные данные и не должна быть публично доступна всем посетителям. IP и user agent могут относиться к чувствительным данным, поэтому храните только то, что действительно нужно
Структура проекта
stats-test/
index.php
track.php
stats.php
visits.json
В visits.json сначала можно записать пустой массив
[]
Файл записи посещения
track.php
<?php
function writeVisit(string $file): void
{
if (!file_exists($file)) {
file_put_contents($file, '[]');
}
$visits = json_decode(file_get_contents($file), true);
if (!is_array($visits)) {
$visits = [];
}
$visits[] = [
'date' => date('Y-m-d H:i:s'),
'url' => $_SERVER['REQUEST_URI'] ?? '',
'ip' => $_SERVER['REMOTE_ADDR'] ?? '',
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
];
$visits = array_slice($visits, -100);
file_put_contents(
$file,
json_encode($visits, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
);
}
writeVisit(__DIR__ . '/visits.json');
Этот файл записывает посещение и хранит только последние 100 записей, чтобы учебный файл не рос бесконечно
Подключение на страницу
index.php
<?php require __DIR__ . '/track.php'; ?>
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Страница со статистикой</title>
</head>
<body>
<h1>Главная страница</h1>
<p>Посещение записано</p>
</body>
</html>
Каждое открытие страницы подключит track.php и добавит запись в visits.json
Страница просмотра статистики
stats.php
<?php
$file = __DIR__ . '/visits.json';
$visits = file_exists($file)
? json_decode(file_get_contents($file), true)
: [];
if (!is_array($visits)) {
$visits = [];
}
$visits = array_reverse($visits);
?>
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Статистика посещений</title>
</head>
<body>
<h1>Последние посещения</h1>
<table border="1" cellpadding="8">
<tr>
<th>Дата</th>
<th>Адрес</th>
<th>IP</th>
</tr>
<?php foreach ($visits as $visit): ?>
<tr>
<td><?= htmlspecialchars($visit['date'] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
<td><?= htmlspecialchars($visit['url'] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
<td><?= htmlspecialchars($visit['ip'] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
Откройте index.php несколько раз, затем откройте stats.php
Почему stats.php нельзя оставлять открытой
Страница статистики показывает технические данные. В реальном проекте ее нужно защищать авторизацией, паролем, IP-ограничением или вовсе не публиковать наружу. Учебный пример помогает понять механику, но не является готовой системой аналитики
Что лучше для реального сайта
Для рабочего проекта лучше использовать
- Яндекс Метрику
- Google Analytics
- серверные логи
- базу данных с нормальной структурой
- отдельную систему продуктовой аналитики
PHP-статистика в файле годится для понимания принципа, но не для серьезных отчетов
Мини-практика
Добавьте в статистику поле referer через $_SERVER['HTTP_REFERER'] ?? ''. Затем выведите его в таблице и проверьте, что поле может быть пустым. После этого ограничьте хранение не 100, а 20 последними визитами
Частые ошибки
Делают страницу статистики публичной Статистику нужно защищать от посторонних
Хранят слишком много данных в файле Файл быстро разрастется. Для реального проекта нужна база или аналитика
Не экранируют вывод Адрес и user agent выводите через htmlspecialchars()
Считают IP точным пользователем IP может меняться, быть общим или принадлежать прокси
Что почитать дальше по PHP
Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:
- Joomla: как убрать index.php из адреса сайта
- Как обновить PHP в Open Server: версия, модули и проверка сайта
- Как обновить PHP на WordPress без поломки сайта
- Как обновить версию PHP в ISPmanager для сайта



