Сколько человек на сайте ?
Наверное многие из вас видели такую модную фишку как "Сейчас на сайте 126
человек, из них в чате 89". Если нет, то поставить счетчик от SpyLog вы можете
легко увидеть сколько человек находится на вашем сайте.
Вот и я решил сам реализовать такую функцию у себя на сайте //ancient.dax.ru ( http://webscript.ru///ancient.dax.ru )
и вот к чему пришел...
Протокол HTTP в принципе не позволяет определить количество посетителей одновременно
находящихся на сайте. Почему это так я объяснять не хочу, но можете мне поверить
на слово. Следовательно приходится придумывать какой-то искусственный метод.
Первое что нам понадобится это база данных (в моем случае это MySQL). В этой
БД нам нужна таблица с двумя полями username и time
CREATE TABLE session (
username varchar(25) DEFAULT '' NOT NULL,
time varchar(14) DEFAULT '' NOT NULL
);
Далее приступим к написанию самого скрипта, вернее одной единственной функции.
Итак,
function online() {
$username = getenv("REMOTE_ADDR");
$past = time()-900;
mysql_query("DELETE FROM session WHERE time < $past");
$result = mysql_query("SELECT time FROM session WHERE username='$username'");
$ctime = time();
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];
}
Алгоритм очень прост. Идентифицируем каждого пользователя и заносим время его
прихода на страницу. Определяем время, через которое пользователь будет считаться
покинувшим сайт. Вот и все.
Теперь пояснения по коду. Первым делом мы получаем адрес удаленного пользователя
(REMOTE_ADDR) и определяем время, через которое будем считать пользователя покинувшим
сайт.
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( mailto:ancient@dax.ru ).
Каталог веб-мастера (статьи, готовые скрипты)
//ancient.dax.ru ( http://webscript.ru///ancient.dax.ru )
|