Jak zrobic licznik osób online (pliki txt)

Wolverine

Do przykladu bedą potrzebne funkcje ze wskazówki z artykułu Zestaw pomocnych funkcji do operacji na plikach tekstowych.

Gdy juz dodamy do pliku odpowiedni kod dopiszemy cos takiego:

<?
  function AddMe() {
    $line = $_SERVER['REMOTE_ADDR'] . '`' . time() . '`';
    file_InsertLineOnTop('online.txt', $line);
  }
  
  function UsersOnline() {
    return file_LinesCount('online.txt');
  }
  
  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()) {
    AddMe();
  }

Użycie:

<?php
$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 możemy po prostu includowac skrypt na naszej stronie i w odpowiednim miejscu wyświetlić zmienną $count.

4 komentarzy

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; } ?>

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

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

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