Нещодавно отримав невелике завдання від знайомого програміста, зробити функцію для його сайту яка б показувала скільки відвідувачів зараз на сайту, що цікаво не використовувати базу даних і як можна компактніше зробити функцію. Я вирішив використовувати заради цього, звичайні текстовими файлами які не міститимуть нічого, отже не займатимуть місце.
Логіка скрипта:
1. Відвідувач входить на сайт, якщо він новий то створюється txt файл з його даними. Якщо ж він недавній відвідувач, то оновлюємо тільки останньою дату модифікації його файлу.
2. Скрипт отримує дані з повним шляхом будь-яких текстових файлів в масив. Перевіряємо коли були зроблені останні модифікації в текстовому файлі.
3. Якщо сума останньої модифікації в текстовому файлі (в unix секундах) + зазначений нами термін актуальності файлу в секундах, є менше поточного часу в секундах значить користувач покинув сайт або не справив обряду поновин сторінку в браузері.
Плюси скрипта:
- Компактна функція з ясно прокоментованим кодом і логічно названими змінними.
- Два види рахунку відвідувачів: 1 - Враховувати тільки IP. 2 - Враховувати IP і браузер
- Незалежний від бази даних
- Не вимагає ніяких конфігурації з боку PHP, вимагає тільки права 777 на папку з файлами.
Мінуси скрипта:
- Може виникнути помилка Permission denied якщо папка з текстовими файлами не має права 777. Але, це скоріше помилка з боку користувача а не скрипта.
- Він не показує поточні кількість людей на сайті, він показує скільки відвідувачів зайшли на сайт за вказаний вами інтервал часу.
- Будь-який скрипт можна написати б краще, скільки програмістів стільки і стилів програмування.
Подивимося код нашої функції
Не забудьте дати папки online_count права 777
<? Php function onlineCount () {// Термін актуальності файлу користувача (в секундах) $ RelevanceOfTheFile = 60; // Шлях до папки де лежать файли відвідувачів $ VisistersFileDir = $ _SERVER [ 'DOCUMENT_ROOT']. '/ Online_count /'; // Враховувати в назві файлу і браузер 1 - так, 0 - немає $ AddBrowserAtFileName = 0; // Зберігаємо новий файл постетітеля $ VisiterFileName = $ _SERVER [ 'REMOTE_ADDR']; if ($ AddBrowserAtFileName) {$ VisiterFileName. = $ _SERVER [ 'HTTP_USER_AGENT']; } $ VisiterFileName = $ VisistersFileDir.md5 ($ VisiterFileName). '. Txt'; $ OpenFile = fopen ($ VisiterFileName, "a +"); // Повний шлях до всіх файлів формату txt $ VisitersFiles = glob ($ VisistersFileDir. '*. Txt'); // Перевіряємо кількість відвідувачів за останні $ RelevanceOfTheFile секунд if (! Count ($ VisitersFiles)) {return 0; } Else {$ ActiveVisiters = 0; foreach ($ VisitersFiles as $ File) {$ AgeFile = filemtime ($ File); if (($ AgeFile + $ RelevanceOfTheFile)> = time ()) {$ ActiveVisiters + = 1; $ UpdateTheDateOfLastEdit = fopen ($ File, 'a +'); @fclose ($ UpdateTheDateOfLastEdit); } Else {@fclose ($ OpenFile); $ DeleteOldFile = unlink ($ File); }} Return $ ActiveVisiters; }} $ OnlineCount = onlineCount (); echo "Відвідувачів на сайт за останню хвилину:". $ OnlineCount; ?> Результат роботи скрипта: Відвідувачів на сайт за останню хвилину: 1 Завантажити архів з прикладом
Всі питання пишемо в коментарях.