Задать вопрос
Thomek
@Thomek

Как добавить два одинаковых скрипта в один файл?

На странице сайта есть скрипт который показывает количества посетителей в данный момент пока в файле session1.txt хранится идентификаторы и время (30 секунд).
$LastTime = time() - 30;
 $base = "session1.txt";


И я хочу добавить тот же скрипт на туже страницу, но с другим значением, и создав второй файл session2.txt
$LastTime = time() - 86400;
 $base = "session2.txt";


Но так как на странице будут два таких же кода показывающих число посетителей...
<?php echo " <b>".sizeof(file($base))."</b>"; ?>

...они не будут показывать каждый отдельную информацию из файлов session1.txt и session2.txt а будут показывать оба одно и тоже число, скорее всего из файла session2.txt

Как сделать чтобы два таких кода <?php echo " <b>".sizeof(file($base))."</b>"; ?> на одной странице, показывали разное число, не смешиваясь, чтобы у них была уникальная подпись?! Я плохо разбираюсь в php.

Вот весь скрипт:
<?php
session_start();
//выделяем уникальный идентификатор сессии
$id = session_id();

if ($id!="") {
 //текущее время
 $CurrentTime = time();
 //через какое время сессии удаляются
 $LastTime = time() - 30;
 //файл, в котором храним идентификаторы и время
 $base = "session1.txt";

 $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");
 for ($i = 0; $i<sizeof($ResFile); $i++) { fputs($fp, $ResFile[$i]); }
 fclose($fp);

 if (!$is_sid_in_file) {
  $fp = fopen($base, "a-");
  $line = $id."|".$CurrentTime."\n";
  fputs($fp, $line);
  fclose($fp);
 }
}
?>

<?php echo " <b>".sizeof(file($base))."</b>"; ?>
  • Вопрос задан
  • 163 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Эх-хе-хе, вот так можно:

<?php
session_start();
$id = session_id();    //выделяем уникальный идентификатор сессии
$CurrentTime = time();    //текущее время





$LastTime = time() - 30;    //через какое время сессии удаляются (30 секунд)
$base1 = "session1.txt";    //файл, в котором храним идентификаторы и время

$file1 = file($base1, FILE_IGNORE_NEW_LINES & FILE_SKIP_EMPTY_LINES);
$fp = fopen($base1, "w");
foreach($file1 as $k => $v) {
 $v = explode("|", $v);
 if ($v[0] != $id AND $v[1] > $LastTime) {
  fputs($fp, "{$v[0]}|{$v1]}\n")
 }
}
if ($id != "") {
 fputs($fp, "{$id}|{$CurrentTime}\n");
}
fclose($fp);
$file1 = count($file1);





$LastTime = time() - 86400;    //через какое время сессии удаляются (1 сутки)
$base2 = "session2.txt";    //файл, в котором храним идентификаторы и время

$file2 = file($base2, FILE_IGNORE_NEW_LINES & FILE_SKIP_EMPTY_LINES);
$fp = fopen($base2, "w");
foreach($file2 as $k => $v) {
 $v = explode("|", $v);
 if ($v[0] != $id AND $v[1] > $LastTime) {
  fputs($fp, "{$v[0]}|{$v1]}\n")
 }
}
if ($id != "") {
 fputs($fp, "{$id}|{$CurrentTime}\n");
}
fclose($fp);
$file2 = count($file2);
unset($CurrentTime, $LastTime, $base1, $base2, $fp);

?>

<?php echo " <b>{$file1}</b>, <b>{$file2}</b>"; ?>
Ответ написан
@alexalexes
Все просто. Принцип переиспользования кода: если бизнес-логика вынуждает дублировать часть кода со слегка другими параметрами, то эта часть кода - отдельная функция (или метод), а изменяемые параметры и результат выполнения кода - это ее входные и выходные параметры.
function file_session_write($base, $deltaLastTime)
{
 $id = session_id();
 //текущее время
 $CurrentTime = time();
 //через какое время сессии удаляются
 $LastTime = time() - $deltaLastTime;
 $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");
 for ($i = 0; $i<sizeof($ResFile); $i++) { fputs($fp, $ResFile[$i]); }
 fclose($fp);

 if (!$is_sid_in_file) {
  $fp = fopen($base, "a-");
  $line = $id."|".$CurrentTime."\n";
  fputs($fp, $line);
  fclose($fp);
 }
  return sizeof(file($base));
}
session_start();
// а тут просто вызываем функцию с какими угодно параметрами, сколько угодно раз
$result1 = file_session_write( "session1.txt", 30);
$result2 = file_session_write( "session2.txt", 86400);
echo 'res1='.$result1.'; res2='.$result2;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы