Скільки людей на сайті


Напевно багато хто з вас бачили таку модну фішку як "Зараз на сайті 126 осіб, з них в чаті 89". Якщо немає, то поставити лічильник від SpyLog ви можете легко побачити скільки людей знаходиться на вашому сайті.
Ось і я вирішив сам реалізувати таку функцію у себе на сайті //ancient.dax.ru і ось до чого прийшов.
Протокол HTTP в принципі не дозволяє визначити кількість відвідувачів одночасно знаходяться на сайті. Чому це так я пояснювати не хочу, але можете мені повірити на слово. Отже доводиться придумувати якийсь штучний метод.

Перше що нам знадобиться це база даних (в моєму випадку це MySQL). У цій БД нам потрібна таблиця з двома полями username і time


CREATE TABLE session (
username varchar (25) DEFAULT '' NOT NULL,
time varchar (14) DEFAULT '' NOT NULL
);

Далі приступимо до написання самого скрипта, вірніше однієї єдиної функції. Отже,

mysql_query ( "DELETE FROM session WHERE time <$past");
$ Result = mysql_query ( "SELECT time FROM session WHERE username = '$ username'");

if ($ row = mysql_fetch_array ($ result)) mysql_query ( "UPDATE session SET username = '$ username', time = '$ ctime' WHERE username = '$ username'");
> Else mysql_query ( "INSERT INTO session (username, time) VALUES ( '$ username', '$ ctime')");
>

$ Result = mysql_query ( "SELECT COUNT (*) FROM session");
$ Count = mysql_fetch_array ($ result);
echo $ count [0];

mysql_query ( "DELETE FROM session WHERE time <$past");
Цією рядком видалити всі прострочені записи.

$ Result = mysql_query ( "SELECT time FROM session WHERE username = '$ username'");
Вибираємо з БД поля, для яких REMOTE_ADDR користувача збігається з уже зафіксованим.

if ($ row = mysql_fetch_array ($ result)) mysql_query ( "UPDATE session SET username = '$ username', time = '$ ctime' WHERE username = '$ username'");
> Else mysql_query ( "INSERT INTO session (username, time) VALUES ( '$ username', '$ ctime')");
>
Якщо такі записи в таблиці є, то оновлюємо, заносимо новий час заходу на сторінку, якщо немає - додаємо новий запис.


$ Result = mysql_query ( "SELECT COUNT (*) FROM session");
$ Count = mysql_fetch_array ($ result);
echo $ count [0];
Вважаємо з бази кількість записів - це і буде кількість відвідувачів на сайті.

Каталог веб-майстри (статті, готові скрипти) //ancient.dax.ru

elseif (getenv ( "HTTP_X_FORWARDED_FOR") strcasecmp (getenv ( "HTTP_X_FORWARDED_FOR"), "unknown"))
$ Ip = getenv ( "HTTP_X_FORWARDED_FOR");

elseif (getenv ( "REMOTE_ADDR") strcasecmp (getenv ( "REMOTE_ADDR"), "unknown"))
$ Ip = getenv ( "REMOTE_ADDR");

elseif (! empty ($ _ SERVER [ 'REMOTE_ADDR']) strcasecmp ($ _ SERVER [ 'REMOTE_ADDR'], "unknown"))
$ Ip = $ _SERVER [ 'REMOTE_ADDR'];

2. можлива у тебе створена таблиця з одним ім'ям, а в скрипті звертаєшся до іншої - уважно перевір.

Створив таблицю в БД, вставив код. В кінці написав: echo "Людина на сайті:" .online (). "";
У мене виводить на сайті:

Warning: mysql_query () [function.mysql-query]: Access denied for user 'root' @ 'localhost' (using password: NO) in /home/hdd1.ru/cronica/sites/www/index.php on line 120
Warning: mysql_query () [function.mysql-query]: A link to the server could not be established in /home/hdd1.ru/cronica/sites/www/index.php on line 120
Can not delete old sess

Хто небудь знає в чому справа?

Дякую, все працює. Давно хотів зробити все ніколи :)

Дякую за скрипт, встановив, трохи перетворив, але основні функції ваші!
Автар молодес)

Молодці рібята спасибі

Народ допоможіть зробити счечік за день за місяць і тоталі
і хоч шото підкажіть буду вдячний.

Спасибі Sahdow! Скрипт від Sahdow навіть Євген Попов взяв для свого урок, і навіть прям з цього
сайту в самому уроці скопіював))

супер! Реально працює!
я поставив код скрипта від користувача Sahdow. Працює як годинник!
Дякуємо.
та, до речі Євген Попов використовував його в уроці по створенню блогу.

Схожі статті