Napisalem sobie skrypt do pokazywania ilosc osob online. Zasada dzialania jest taka:
user wchodzi na strone, jest to zapisywane do pliku tekstowego w nastepujacy sposob:
Cytat
IPUSERA|*|time()wejsciaNaStrone|*|session_id()

Przy kazdym odswierzeniu strony time() jest zmieniany na aktualny.

Automatycznie przy wejsciu skrypt sprawdza tez ktore z zapisanych sesji byly aktywne wiecej niz 3 minuty temu i wywala je.

Oto kod:
  1. <?php
  2. // ile userow na stronie
  3.  
  4. $file = 'sesje.txt';
  5.  
  6. $arr = file($file);
  7.  
  8. $i = 0;
  9. foreach ( $arr as $line )
  10.  { 
  11.  
  12.  $piece = explode('|*|',$line);
  13.  $time = time() - $piece[1];
  14.  $time = $time/60;
  15.  if ( $time >= 3 )
  16.  {
  17.  $arr[$i] = '';
  18.  $arr = implode('',$arr);
  19.  $fp1 = fopen($file , 'w');
  20.  flock($fp1, 2);
  21.  fputs($fp1, $arr);
  22.  flock($fp1, 3);
  23.  fclose($fp1); 
  24.  
  25.  }
  26. else 
  27.  {
  28.  $i++;  
  29. } 
  30. }
  31.  
  32.  
  33.  
  34. $fp = fopen($file,'a+');
  35.  
  36. if ( $_SESSION['sesja'] == 0 )
  37. {
  38.  $string = getenv('REMOTE_ADDR') . '|*|' . time() . '|*|' . session_id() . "rn";
  39.  fwrite($fp,$string);
  40.  $_SESSION['sesja'] = 1;
  41.  echo 'Sesja ma ID:' . session_id();
  42. } 
  43. else
  44. {
  45.  $_SESSION['sesja'] = 1;
  46.  echo 'Sesja ma ID:' . session_id();
  47.  $y = 0;
  48.  
  49. if ( count(file($file)) !== 0 ) 
  50. {
  51.  foreach ( $arr as $line )
  52. {
  53.  $piece = explode('|*|',$line);
  54.  if ( trim($piece[2]) == session_id() )
  55.  {
  56. $arr[$y] = getenv('REMOTE_ADDR') . '|*|' . time() . '|*|' . session_id() . "rn";
  57. $arr = @implode('',$arr);
  58. $fp1 = fopen($file , 'w');
  59. flock($fp1, 2);
  60. fputs($fp1, $arr);
  61. flock($fp1, 3);
  62. fclose($fp1); 
  63.  }
  64. $y++;  
  65. } 
  66.  }
  67. }
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74. echo '<br><br>' . count(file($file));
  75.  
  76. ?>



Zauwazylem jednak jeden problem, z ktorym nie umiem sobie poradzic.

Sesja trwa zazwyczaj do momentu zamkniecia przegladarki, skrypt zapisuje moment wejscia na strone. Jezeli nie bede aktywny na stronie poprzez wiecej niz 3 minuty, skrypt o mnie zapomni i wyrzuci dane z pliku. Gdy odswieze strone (bo nagle sobie o niej przypomne) skrypt nie zaliczy tego ze jestem online.