Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Список посетителей Online на файлах
 
 автор: Sl   (28.04.2007 в 13:54)   письмо автору
 
 

Объясните как можно реализовать эту систему на файлах. На мускуле к сожалению не могу

Я вот как понял. У нас есть файл online.dat . Сначала мы устанавливаем идентификатор сессии (id) и время визита. Как только посетитель зашел мы ищем этот id в файле. Если там его нет, то записываем id и время визита в файл. Если же такой id присутствует в файле заменяем просто время. И потом соответсвенно эти идентификаторы выводить. Т.е количество id и будет количество человек. Как сделать так чтобы, когда посетитель ушел со страницы id и время стерлось, т.е как определить что он ушел со страницы ?

И вообще я правильно рассуждаю или нет ?
Спасибо

   
 
 автор: bronenos   (28.04.2007 в 13:59)   письмо автору
 
   для: Sl   (28.04.2007 в 13:54)
 

при запуске скрипта просто стирайте из файла записи у которых время на N минут меньше, чем time(). невозможно определить, когда юзер ушел

   
 
 автор: Sl   (29.04.2007 в 09:33)   письмо автору
 
   для: bronenos   (28.04.2007 в 13:59)
 

Пролистал многие ссылки, но ничего путного не нашел.
Вот код, который я написал. Он добавляет данные и обновляет время. Но он пока не очищает список от ненужных данных


function users_online() {
  $online_buf = '';
  # Получаем идентификатор
  $online_id = session_id();
  # Определяем статус юзера
  $user = status_user($user);
  # Определяем время
  $online_date = date("H:i:s");
  # Формируем данные в строку 
  $st = "$online_id|$user|$online_date";
  # если файл еще не был создан, создаем
  if(!file_exists('data/online.dat')) {
    $f = fopen('data/online.dat','w');
    fclose($f);
  }
  $online_file = file('data/online.dat');
  # Если файл пустой
  if(!$online_file) {
    $f = fopen('data/online.dat','a+');
    fwrite($f,$st."\n");
    fclose($f);
  }
  # Если файл не пуст
  else {
    # Проверка на существующий идентификатор сессии
    foreach($online_file as $val)  {
      $online_line = explode('|',$val,3);
      list($sid,$status,$time) = $online_line;
      # Если идентификатор присутствует, то меняем его время на новое
      if($sid == $online_id)  {
        $resid = $online_id;
        $reuser = status_user($reuser);
        $retime = date("H:i:s");
        $online_buf.= "$resid|$reuser|$retime\n";
        $update = true;
      }
      else $online_buf.= $val;
    }
    # Если обновление было, перезаписываем файл
    if($update)  {
      $f = fopen('data/online.dat','w');
      fwrite($f,$online_buf);
      fclose($f);
    }
    # Если идентификатор старый не обнаружен, добавляем в базу
    else  {
      $f = fopen('data/online.dat','a+');
      fwrite($f,$st);
      fclose($f);
    }
  }
}
function status_user($user)  {
  if(isset($_COOKIE['userbook']))
    $user = $_COOKIE['userbook'];
  else  $user = 0;
  return $user;
}


>при запуске скрипта просто стирайте из файла записи у которых время на N минут меньше, чем time(). невозможно определить, когда юзер ушел

Можете написать код этого действия, пожалуйста. Я например хочу чтобы если дата у идентификатора была на 20 минут больше то очищаем идентификатор.
Не врубаюсь я вообще как это сделать (

   
 
 автор: bronenos   (29.04.2007 в 10:19)   письмо автору
 
   для: Sl   (29.04.2007 в 09:33)
 

вот например так
если данные хранятся в виде: IP время
<?php
$name 
'online.dat';
$limit 20;

$list file ($name);
foreach (
$list as $id=>$item)
{
  list (
$ip$time) = explode (' 'trim($item));
  if (
$time $limit*60) unset ($list[$id]);
}

$fp fopen ($name'w');
fwrite ($fpimplode(''$list));
fclose ($fp);
?>

   
 
 автор: Sl   (29.04.2007 в 10:42)   письмо автору
 
   для: bronenos   (29.04.2007 в 10:19)
 

а как должна выглядеть дата ?
Допустим у меня так написано - 19:30
Если я напишу 19:30 < 1200, то разве это сработает ?
Или нужно убрать двоеточия? Тогда будет 1930

   
 
 автор: bronenos   (29.04.2007 в 10:46)   письмо автору
 
   для: Sl   (29.04.2007 в 10:42)
 

лучше записывать время не date(), а time()

   
 
 автор: Sl   (29.04.2007 в 10:51)   письмо автору
 
   для: bronenos   (29.04.2007 в 10:46)
 

но если писать time(), то она никогда не будет меньше 1200. Там чуть ли не 8 цифр

   
 
 автор: ddhvvn   (29.04.2007 в 11:00)   письмо автору
 
   для: Sl   (29.04.2007 в 10:51)
 

Сохраняйте метку входа тоже функцией time(), тогда проверка будет примерно такой

<?php
..
//$reg_time - время входа
  
if (time() > $reg_time $limit 60)
//лимит превышен
...
?>

   
 
 автор: Sl   (29.04.2007 в 11:05)   письмо автору
 
   для: ddhvvn   (29.04.2007 в 11:00)
 

что значит время входа ? $reg_time. Я как понял $reg_time это обычный time() но ведь он уже задействован в коде

if(time() > ....

Тогда можно записать так сразу
if(time() > time() + $limit * 60)

   
 
 автор: bronenos   (29.04.2007 в 11:07)   письмо автору
 
   для: Sl   (29.04.2007 в 11:05)
 

я вам код выше написал с учетом использования именно этой функции
так что можете брать ее

   
 
 автор: Sl   (29.04.2007 в 11:10)   письмо автору
 
   для: ddhvvn   (29.04.2007 в 11:00)
 

А гоню. $reg_time это наверное зарегистрированное время (time) из файла =)

   
 
 автор: Sl   (29.04.2007 в 11:01)   письмо автору
 
   для: Sl   (29.04.2007 в 10:51)
 

Может так сделать. Это будет правильно или нет ?

Вычтем текущий time() от записанного time() в файле. Если результат больше чем 1200, то значит прошло 1200 сек. (т.е 20 минут)

   
 
 автор: ddhvvn   (29.04.2007 в 11:10)   письмо автору
 
   для: Sl   (29.04.2007 в 11:01)
 

А я Вам про что говорил?!

Именно так!

   
 
 автор: Sl   (29.04.2007 в 11:13)   письмо автору
 
   для: ddhvvn   (29.04.2007 в 11:10)
 

Да все понял. Спасибо всем огромное. Очень помогли )

   
 
 автор: cheops   (28.04.2007 в 16:45)   письмо автору
 
   для: Sl   (28.04.2007 в 13:54)
 

Возможно вас заинтересует тема по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=10772.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования