Programowanie w języku PHP » FAQ

Jak zrobic licznik osób online (pliki txt)

Do przykladu bedą potrzebne funkcje ze wskazówki "Jak łatwo wykonać jakąś operace na pliku txt?". Gdy juz dodamy do pliku odpowiedni kod dopiszemy cos takiego:

<?
  function AddMe() {
    $line = $_SERVER['REMOTE_ADDR'] . '`' . time() . '`';
    file_InsertLineOnTop('online.txt', $line);
  }
 
  function UsersOnline() {
    $now = file_LinesCount('online.txt');
    return $now;
  }
 
  function AmI () {
    $online = file ('online.txt');
    for ($q = 0; $q < count($online); $q++) {
      $current = explode('`', $online[$q]);
      if ($current[0] == $_SERVER['REMOTE_ADDR']) {
        file_UpdateLine('online.txt', $q, $current[0] . '`' . time() . '`');
        return true;
      }
    }
    return false;
  }
 
  if (filesize('online.txt') > 0) {
    $online = file ('online.txt');
    for ($q = 0; $q < count($online); $q++) {
      $current = explode('`', $online[$q]);
      if ((time() - $current[1]) > (60 * 5)) {
        $fp = fopen ('online.txt', "w");
        flock($fp, LOCK_EX);
        for( $w = 0; $w < count($online); $w++ ) {
        if ($q <> $w)
          fwrite ($fp, $online[$w]);
        }
        flock($fp, LOCK_UN);
        fclose($fp);
      }
    }
  }
 
  if (AmI() == false) {
    AddMe();
  }
 
  $count = count($online);
 
  //============================
 
  echo ('Aktualnie jest ' . $count . ' uzytkownikow na stronie');
?>


Na koniec tworzymy w katalogu ze skryptem plik o nazwie online.txt i ustawiamy mu odpowiednie prawa. Potem mozemy po prostu includowac skrypt na naszej stronie i w odpowiednim miejscu wyswietlic zmienna $count.

Moze istnieje lepsza metoda, ale mnie niestety na taka nie stac

4 komentarze

mejbi 2004-07-04 16:12

Jedna funkcja wyrzucająca liczbę gości online...

<?php

function online_users()
{
    $myip = $_SERVER['REMOTE_ADDR'];
    $timeout = 300; # czas w sekundach po jakim usuwany jest wpis uzutkownika
    $filename = 'online.dat'; # nazwa pliku lub sciezka dostepu do niego
    $file = file($filename);
    $count = count($file);
    $add = true;
    $online = 0;
    $fopen = fopen($filename, "w");
    flock($fopen, LOCK_EX);
    for($i=0; $i<$count; $i++)
    {
        $data = explode('|', chop($file[$i]));
        if($data[0]==$myip)
        {
            fputs($fopen, $myip.'|'.time()."\\r\\n");
            $add = false;
            $online++;
        }
        else
        {
            if($data[1]>=(time()-$timeout))
            {
                fputs($fopen, $data[0].'|'.$data[1]."\\r\\n");
                $online++;
            }
        }
    }
    if($add)
    {
        fputs($fopen, $myip.'|'.time()."\\r\\n");
        $online++;
    }
    flock($fopen, LOCK_UN);
    fclose($fopen);
    return $online;
}

?>

Wolverine 2004-05-28 21:51

aha, moglem o tym pomyslec wczesniej i zrobic choc mala konfiguracje do tego:

if ((time() - $current[1]) > (60 * 5)) {


w nawiasie jest liczba sekund, po jakiej uzytkownik jest usuwany

CooBek 2004-05-28 21:11

Bardzo dobra wskazowka :-) Gdyby bylo ocenianie, dalbym 6 ;-) Ulala! :D Wreszcie znalazlem ;] Juz pedze zamieszczam to na homepage ;]

mcbury 2004-05-28 19:53

Świetne wolverine(chociaz sie PHP nie interesuje[diabeł])