Материалы
[:NetFAQ://]


Поиск

[:NetFAQ://]


Партнеры
Хостинг от Park-Web

www.popularsite.ru
[:NetFAQ://]


Реклама
Строительный бизнес и всё о нём - паркет петербург.

обучение в Англии цены
[:NetFAQ://]


Сколько человек на сайте?




Сколько человек сейчас на сайте?

Уверен ты видел на сайтах вывески подобные этой: "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 Ура получилось спасибо

Оставить комментарий:

Имя:
Почта:
Комментарий:
Что написанно на картинке;)
[:NetFAQ://]

Справочники
[:NetFAQ://]


FreeSoftware
Графика
Аудио&Видео
CD&DVD
Офис
Системные утилиты
Антивирусы
Игры
Разное
[:NetFAQ://]


Магазин
Вавилон 5 - второй сезон
Вавилон 5 - второй сезон
[:NetFAQ://]


Статистика


[:NetFAQ://]


FAQ Новости Блог RSS Задать вопрос