Счетчик онлайна на php с глюком

Adelf

Administrator
Команда форума
Dr.And
ты "только начал изучать" php полгода назад. в такой элементарщине уже должен был начать разбираться.
Если у тебя ошибка - совет простой http://phpfaq.ru/debug
 

Dr.And

Новичок
Dr.And
ты "только начал изучать" php полгода назад. в такой элементарщине уже должен был начать разбираться.
Если у тебя ошибка - совет простой http://phpfaq.ru/debug
Ну то, что я создал эту тему пол-года назад еще не значит, что я все это время пыхтел над изучением php.
А за ссылку - спасибо.
 

С.

Продвинутый новичок
Ну и славненько. Лучше делать то, что умеешь и любишь, над чем и попыхтеть в радость.
 

Mr.Nobody

Новичок
если ты чего то не понимаешь, что написано в скриптах, может лучшим вариантом является прочитать хотя бы мануал по php, тогда многое станет понятным и такая элементарная проблема решится сам собой.
 

Dr.And

Новичок
если ты чего то не понимаешь, что написано в скриптах, может лучшим вариантом является прочитать хотя бы мануал по php, тогда многое станет понятным и такая элементарная проблема решится сам собой.
Ну хорошо. Мне не понятно, почему в файл .dat пишутся пробелы в строках. Переделал вот так:
PHP:
<?php
session_start();
//выделяем уникальный идентификатор сессии
$id = session_id();
if ($id!="")
{
 //текущее время
 $CurrentTime = time();
 //через какое время сессии удаляются
 $LastTime = time() - 60;
 //файл, в котором храним идентификаторы и время
 $base = "base_sessions.dat";

 $file = file($base);
 $k = 0;
 for ($i = 0; $i < sizeof($file); $i++) {
  $line = explode("|", $file[$i]);
   if ($line[1] > $LastTime) {
   $ResFile[$k] = $file[$i];
   $k++;
  }
 }

 for ($i = 0; $i<sizeof($ResFile); $i++) {
  $line = explode("|", $ResFile[$i]);
  if ($line[0]==$id) {
      $line[1] = trim($CurrentTime)."\n";
      $is_sid_in_file = 1;
  }
  $line = implode("|", $line); $ResFile[$i] = $line;
 }

 $fp = fopen($base, "w") or die ("Нет доступа к базе данных"); flock ($fp, 2);
 for ($i = 0; $i<sizeof($ResFile); $i++) { fputs($fp, $ResFile[$i]); }
 fclose($fp);

 if (!$is_sid_in_file) {
  $fp = fopen($base, "a");
  $line = trim($id)."|".trim($CurrentTime); /* здесь обрезаю пробелы и в идентификаторе и во времени */
  fputs ($fp, trim($line)."\n"); /* здесь обрезаю пробелы еще раз и делаю перевод строки */
  flock ($fp, 3); fclose($fp);
 }
}
echo "Сейчас на сайте: ".sizeof(file($base))." чел.";
?>
Не знаю где еще пробелы обрезать, уже в принципе не где. Но они все равно появляются в файле .dat
Я понимаю, что код не идеальный. Но задача - убрать пробелы.
Убираю, а они есть... Вот вам и мануал по php.
 

С.

Продвинутый новичок
Ты этот бедный файл замордовал своим открытиями-закрытиями взад-вперед. Но это не важно.
Какие пробелы у тебя не убираются?
 

Dr.And

Новичок
Я делаю новую версию сайта. Там обновление скрипта аяксом будет идти уже через 4,5 мин. В самом скрипте установлю таймаут 5 мин.
Таким образом будет через 4,5 мин. обновляться время прикрученное к идентификатору сессии (если пользователь еще на странице) и если пользователь ушел - то через 5 мин. от последнего обновления его идентификатор сессии удалится с файла .dat.
Этим самым будет проверяться онлайн и разгрузится сервер.
Ты этот бедный файл замордовал своим открытиями-закрытиями взад-вперед. Но это не важно.
Какие пробелы у тебя не убираются?
Пробелы в файле .dat возникают перед идентификаторами сессий. Вот ниже пример такой записи в файле:

s0k34bjf6vsu13jddse8im8vo2|1356015110
nkogriq3tcue2htkcmo19i3ou2|1356015110
(здесь куча пробелов) k0qnpari2vk22053hua63glhr0|1356015110
jpcpm1pil0jtot0b28f8m83vu6|1356015110
tmo9ua7utvlg4ialegu27tapd6|1356015110
hg69qmhghf3hmvjfmfnfp19cg|1356015110
 

С.

Продвинутый новичок
Это пробелы не от идентификатора сессии, а из-за того, что ты некорректно работаешь с файлом. Все-таки его мордование даром не прошло.

Поскольку ты не представляешь себе, что все эти строки кода делают, то я не знаю как тебе помочь. Не делать же вместо тебя.
 

Dr.And

Новичок
Файл "мордовать" перестал, но глюки остались...
Видать придется обратиться к фрилансерам...
 
Сверху