ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Скрипт Пользователей онлайн
  #1  
Старый 16.03.2009, 09:10
SXtingeR13
Новичок
Регистрация: 26.02.2009
Сообщений: 6
Провел на форуме:
19334

Репутация: 0
По умолчанию Скрипт Пользователей онлайн

Кто может поделиться скриптом пользователей онлайн, кто шас на портале показывал цифрами, сколько их шас, не нагружая сервер.
 
Ответить с цитированием

  #2  
Старый 16.03.2009, 09:15
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме:
4832771

Репутация: 1916


По умолчанию

А там делать по сути нечего.
Берёшь сессию каждого, берёшь таймстамп и записываешь в БД. При каждом обновлении страницы обновляешь данные и удаляешь записи тех пользователей, которые не проявили активность в течении N минут)
А вывод просто SELECT COUNT (*) и т.д...
 
Ответить с цитированием

  #3  
Старый 16.03.2009, 09:24
AkyHa_MaTaTa
Постоянный
Регистрация: 19.03.2007
Сообщений: 684
Провел на форуме:
3152874

Репутация: 1020


Отправить сообщение для AkyHa_MaTaTa с помощью ICQ
По умолчанию

Ну таких скриптов прут пруди, забей в гугле, или как написал .:EnoT:. напиши сам.
 
Ответить с цитированием

  #4  
Старый 16.03.2009, 09:38
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме:
4832771

Репутация: 1916


По умолчанию

Я думаю лучше запостить пример.


Создаём таблицу:
Код:
CREATE TABLE `sessions` (
  `sid` varchar(32) NOT NULL,
  `lastdate` datetime NOT NULL
) ENGINE=MyISAM;
Сам скрипт:

PHP код:
<?php
session_start
();

$interval 15//Интервал бездействия пользователя в минутах  

$sid session_id(); //Берём ID сессии

$sql mysql_query("SELECT * FROM `sessions` WHERE `sid` = '".$sid."'");


if(
$sql && mysql_num_rows($sql)){
    
    
/*
      Если сессия с таким ID уже записана, обновляем
    */ 
    
mysql_query("UPDATE `sessions` SET `lastdate` = NOW() WHERE `id_session`='".$sid."'");
    
}else{
    
    
/*
      Если нет, добавляем
    */    
    
mysql_query("INSERT INTO `sessions` VALUES('".$sid."', NOW())");
}

/*
  Удаляем записи пользователей не проявивших активность
  в течении времени указанного в $interval
*/

mysql_query("DELETE FROM `sessions` WHERE `lastdate` < NOW() - INTERVAL '".$interval."' MINUTE");


?>

И вывод типа того:
Код:
SELECT COUNT(*) AS `online` FROM `sessions`
 
Ответить с цитированием

  #5  
Старый 16.03.2009, 09:42
bombeg
Участник форума
Регистрация: 27.10.2008
Сообщений: 244
Провел на форуме:
963613

Репутация: 428
По умолчанию

.:EnoT:., прочитай про ON DUPLICATE
 
Ответить с цитированием

  #6  
Старый 16.03.2009, 09:54
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме:
4832771

Репутация: 1916


По умолчанию

bombeg, В своих скриптах использую, а это всего лишь пример. Может мне следовало бы ещё класс работы с mysql выложить, что всё было круто? Зачем? Если ТС в этом разбирается он без труда заточит как надо. Или например может добавить IGNORE, ключи...да в общем что угодно
 
Ответить с цитированием

  #7  
Старый 16.03.2009, 10:22
SXtingeR13
Новичок
Регистрация: 26.02.2009
Сообщений: 6
Провел на форуме:
19334

Репутация: 0
По умолчанию

Думаю вариант не такой

Собственно скрипт:
<?Php
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) < MAX_IDLE_TIME * 60) {
$count++;
}
} }
closedir($directory_handle);
return $count;
} else {
return false;
}}
echo 'Пользователей онлайн: ' . getOnlineUsers() . '<br />';
>
Подсчёт пользователей, стоит на месте, сесия необновляеться,
если только таким действием его убивать

session_save_path("/path/to/custom/directory");

А если путь до дир незнаеш как быть?
 
Ответить с цитированием

  #8  
Старый 16.03.2009, 11:50
rcc0023
Участник форума
Регистрация: 03.07.2008
Сообщений: 177
Провел на форуме:
644324

Репутация: 11
По умолчанию

Уф.. предложу другой вариант:
В базе создать таблицу с полями: id,ip,br,date
Там где нужно вывести число онлайн:

Цитата:
<?

$date=time();

$ip=getenv('REMOTE_ADDR');
$br=$_SERVER['HTTP_USER_AGENT'];

$len_online_inbase=mysql_num_rows(mysql_query('SEL ECT id FROM '.$table_online_user." WHERE ip='".$ip."' and br='".$br."' LIMIT 1"));

if($len_online_inbase==1){mysql_query('UPDATE '.$table_online_user.' SET date='.$date." WHERE ip='".$ip."' and br='".$br."' LIMIT 1");}
else{mysql_query('INSERT INTO '.$table_online_user." SET ip='".$ip."',br='".$br."',date=".$date);};

$date_time_out=$date-180; //// 180 - 3 минуты

$len_online_now=mysql_num_rows(mysql_query('SELECT * FROM '.$table_online_user.' WHERE date > '.$date_time_out));

echo 'сейчас: '.$len_online_now.' на сайте';

?>

Последний раз редактировалось rcc0023; 16.03.2009 в 11:53..
 
Ответить с цитированием

  #9  
Старый 16.03.2009, 15:51
SXtingeR13
Новичок
Регистрация: 26.02.2009
Сообщений: 6
Провел на форуме:
19334

Репутация: 0
По умолчанию

Ето понятно, есчё + подключить скрипт, если несложно допиши его, зарание благодарен
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
продаю 7 dig icq Ili@s ICQ - Покупка, продажа 2 07.05.2009 06:51



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ