Хто зараз на сайті - php

В Інтернеті багато готових скриптів, що дозволяють вважати користувачів онлайн, але раз ви читаєте цю статтю, значить, ви як і я не особливо любите колупатися в чужому коді. Ну, в такому, випадку, давайте, напишемо такий скрипт самі. Але перш поговоримо про його переваги та недоліки.

Йому не потрібна реляційна база даних, що погодьтеся, в нашому Рунеті (я маю на увазі щодо безкоштовну його частина), є безперечною перевагою.
Знову ж безперечною перевагою є швидкість. Я не полінувався написати подібний скрипт з використанням БД і за допомогою функції microtime () (в самому низу - результат її роботи - «Час генерації: ...») виміряв час виконання:
Використовуючи сесії - 0,7 мс
Використовуючи БД - 14,2 мс
Тобто перевага в швидкості - більш ніж в 19 разів! Ви можете сказати. «Теж мені велику справу. Всього 13 мс різниця », так вони будуть праві - а якщо відвідуваність велика? Зростає навантаження на сервер і тоді дійсно така перевага стає очевидним.
Ще одна перевага - те, що інформація в сесіях зберігається поки не закритий браузер або 1440 секунд (стоїть за умовчанням в php.ini), в БД інформацію про користувачів вам довелося б видаляти вручну.
І останнє - простота, щоб оголосити сесію досить викликати функцію session_start (), а щоб налаштувати правильних чином БД потрібно написати цілих 15 рядків коду.

Немає детальної статистики - в зможете тільки дізнатися кількість користувачів в даний момент, для ведення статистики (хіти, хости ...) доведеться все-таки працювати з БД.
Потрібен PHP4 - як це не парадоксально - ще не все хостери поставили собі PHP4.

session_start ();
define ( "MAX_IDLE_TIME", 3);
function getOnlineUsers ()<
if ($ directory_handle = opendir (session_save_path ())) <
$ Count = 0;
while (false! == ($ file = readdir ($ directory_handle))) <
if ($ file! = '.' $ File! = '..')<
if (time () - fileatime (session_save_path (). ''. $ file) $ Count;
>
>>
closedir ($ directory_handle);
return $ count;
> else <
return false;
>>
echo 'користувачів онлайн:'. getOnlineUsers (). '
';
?>


ЗАУВАЖЕННЯ: Якщо у вас немає спеціальної директорії для зберігання сесій, просто відразу першим рядком додайте:

Тепер пройдемося по окремих частинах коду:

Тепер ми оголошуємо функцію getonlineuser () і відразу відкриваємо "сесійний" директорію:

if ($ directory_handle = opendir (session_save_path ()))


Далі йде частина коду, яка власне і відповідає за підрахунок користувачів, функція повертає кількість користувачів онлайн:

$ Count = 0;
while (false! == ($ file = readdir ($ directory_handle))) <
if ($ file! = '.' $ File! = '..')<
if (time () - fileatime (session_save_path (). ''. $ file) $ Count;
>
>
closedir ($ directory_handle);

І мабуть, розумно буде висновок кількості користувачів в кінці:

echo 'Онлайн користувачів:'. getOnlineUsers (). '
';

Схожі статті