Привет, айтишники и самоделкины! 😎
Сегодня расскажу, как я улучшил свой простенький PHP-счётчик уникальных посетителей, чтобы он не только считал IP-адреса, но и запоминал, откуда пришёл человек: из Яндекса, с Google, с соцсетей или вообще напрямую.
И да — это реально сделать за 10 минут, даже если вы не full-stack-джедай.
У меня на сайте (/book
) давно висел минималистичный счётчик уникальных посетителей. Он:
User-Agent
);Код выглядел так:
<?php
$counterFile = '/var/www/book/daily_visitors.dat';
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
if (preg_match('/bot|crawl|spider|slurp|google|yandex/i', $userAgent)) {
die();
}
$ip = $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1';
$data = [];
if (file_exists($counterFile)) {
$data = json_decode(file_get_contents($counterFile), true) ?? [];
}
if (!in_array($ip, $data)) {
$data[] = $ip;
file_put_contents($counterFile, json_encode($data));
}
header('Content-Type: text/plain');
echo count($data);
?>
Работает? Да.
Информативен? Не очень.
Хочется понимать, откуда вообще люди узнают о моём сайте? Очень!
В HTTP-заголовках есть поле Referer (да, с ошибкой в слове — исторически сложилось 😅). Оно содержит URL страницы, с которой пользователь перешёл на ваш сайт.
В PHP к нему легко получить доступ:
$referer = $_SERVER['HTTP_REFERER'] ?? '';
Теперь можно не просто сохранять IP, а сохранять структуру вида:
{
"192.168.1.100": {
"first_visit": "2025-04-05 12:34:56",
"referer": "https://yandex.ru/search/?text=мой+сайт"
},
"203.0.113.42": {
"first_visit": "2025-04-05 13:01:22",
"referer": ""
}
}
Так мы получим не только количество уникальных, но и историю их прихода.
Вот как теперь выглядит мой counter.php
:
date('Y-m-d H:i:s'),
'referer' => $referer
];
file_put_contents($counterFile, json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
}
// Возвращаем количество уникальных
header('Content-Type: text/plain');
echo count($data);
?>
💡 JSON_UNESCAPED_UNICODE
— чтобы кириллица в referer
(например, из Яндекса) не превращалась в \u0442\u0435\u043a\u0441\u0442
.
Теперь у меня есть база данных (ну, почти) в одном файле. А значит:
referer
и группирует по источникам:
yandex.ru
→ «Поиск: Яндекс»google.com
→ «Поиск: Google»vk.com
→ «Соцсети: ВКонтакте»referer
→ «Прямые заходы»Referer
не всегда есть — если пользователь ввёл URL вручную, открыл закладку или использует приватный режим, он будет пустым./var/www/book/daily_visitors.dat
, а не в public_html
).Иногда самые простые инструменты — самые полезные.
Мой счётчик — не Google Analytics и не Matomo, но он мой, лёгкий, без трекеров, и теперь он ещё и умный.
Если у вас тоже есть самописный счётчик — попробуйте добавить referer
. Это как поставить "черный ящик" на сайт: вы не знаете, что будет, но потом будет интересно посмотреть.
А если захотите — могу скинуть скрипт для парсинга этого файла и вывода красивой статистики в консоли или веб-интерфейсе. Пишите в комменты!
Внимание: Cтатьи здесь сгенерированны через нейросеть, не правил ошибки, да и не до этого пока. Блог только запустил. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я делал минимум один раз. Сервера стоят, клиенты довольны, дата-центры не горят.
Если у вас есть вопросы, или Нашли неточность? пишите в коментах —
вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии