|

Сколько человек сейчас на сайте?
Уверен ты видел на сайтах вывески подобные этой: "555 человек online.", и наверняка
тебе стало интересно, как-же всё работает и каким же образом им удалось подсчитать
количество людей на сайте? Не поверишь - легко и просто! Если ты вооружен PHP и MySQL, то данная задача не
составляет совершенно никаких проблем.
Описание концепции
Сперва следует разобрать общий принцип и алгоритм работы нашей нехитрой системы.
Человек заходит на сайт, в базу данных заносится следующая информация: во первых время "захода",
во вторых ip адрес клиента. Предположим что в среднем, клиент проводит на странице 5 минут, или же 300 секунд,
если быть точным.
Тогда при заходе на эту же страницу другим клиентом, его данные так-же будут записаны в таблицу БД и время "захода"
(по умному timestamp), будет
сопоставлено с уже имеющимися в базе данных, таким образом, общее число людей находящихся в online,
будет сформировано из тех клиентов у которых разность между timestamp в БД и timestamp`oм
нового клиента не более чем 5 минут.
За работу!
Не поняли? Голова идёт кругом? На самом деле это легче написать чем выговорить :-)
Создадим таблицу:
CREATE TABLE online(id INT(8) AUTO_INCREMENT PRIMARY KEY, stamp VARCHAR(20), ip VARCHAR(15));
Готовый скрипт, с пояснениями:
<?
/* логин, пароль, адрес MySQL сервера - !!!не забудь поменять на свои!!! */
$user = "user";
$pass = "password";
$host = "localhost";
$base = "test";
@mysql_connect($host,$user,$pass) or die(mysql_error());
@mysql_select_db($base) or die(mysql_error());
/* успешно подключились */
function onLine() {
$distance = 300; /* предпологаемое время нахождения клиента в активном
состоянии, в нашем случае 5 минут */
$ip = $_SERVER['REMOTE_ADDR']; /* адрес клиента */
$query = "DELETE FROM `online` WHERE 'stamp'+$distance < ".time()." OR `ip` = '$ip'";
@mysql_query($query) or die(mysql_error());
/* этот запрос стоит пояснить. В нём мы удаляем из таблицы 'online'
все просроченные записи, а также записи
совпадающие с нашим ip адресом. */
$query = "INSERT INTO `online`(`stamp`,`ip`) VALUES('".time()."','".$ip."')";
@mysql_query($query) or die(mysql_error());
/* вносим информацию о новом клиенте */
$result = mysql_query("SELECT COUNT(*) FROM `online`");
/* этим запросом мы считаем сколько всего записей в нашей таблице.
сколько записей, столько и клиентов на сайте. */
$row = mysql_fetch_array($result,MYSQL_BOTH);
return ($row[0]);
}
echo onLine(); /* резултат можно оформить по вкусу, или же просто вывести на экран */
?>
На этом всё, успехов!
Опубликовано: 2008-06-06 18:31:07 purple_m0nkey
Комментарии
| Petro |
Ура получилось спасибо
|
|
|
Оставить комментарий:
|
|
|