Jak sprawdzić ilość osób na stronie?

Autor: Michał Fikus, dodano: 25-07-2003
Kategoria: Programowanie i tworzenie

Dzięki temu tutorialowi nauczysz się jak sprawdzić ile w danym momencie jest użytkowników na Twojej stronie. Skrypt bazuje na bazie danych MySQL, lecz po drobnej przeróbce można go oprzeć również na plikach tekstowych.

Opis działania skryptu

Nie da się dokładnie określić ile osób w danej chwili przegląda nasze strony, lecz można podąć tą liczbę w przybliżeniu. Np. ile osób było na stronie w ciągu ostatnich 60 sekund. W momencie gdy internauta wchodzi na naszą stronę, skrypt pobiera jego numer IP, czas w którym wszedł na stronę i nazwę pliku w którym jest umieszczony nasz skrypt. Te dane zostają zapisane w odpowiednio przygotowanej tabeli w bazie danych MySQL.

 

Następnie skrypt analizuje rekordy znajdujące się w bazie danych - jeśli istnieje choć jeden wpis o dacie większej niż ustalony limit (np. 60 sekund), to zostaje on automatycznie usunięty. Teraz zliczane są wszystkie wpisy o różnych numerach IP (w celu wyeleminowania podwójnego zliczania pojedyńczych osób) i liczba ta jest wyświetlana na stronie. Skomplikowane? Napewno nie. Więc zabierzmy się za analizę kodu.

Kod skryptu

Na początek musimy utworzyć tabelę:

 

CREATE TABLE IleOnline ( czas int(15) DEFAULT '0' NOT NULL, ip varchar(40) NOT NULL, plik varchar(100) NOT NULL, PRIMARY KEY (czas), KEY ip (ip), KEY plik (plik) );

 

A teraz zaczynamy pisać główny kod. Na początek ustalamy namiary na naszą bazę danych - odpowiednio host, login, haslo i nazwa bazy dancyh. Następnie podajemy limit czasu w jakim musiały nastąpić odwiedziny (od wywołania skryptu) by zostały zliczone. Wartość podajemy w sekundach. Po ustaleniu tych danych dowiadujemy się od której godziny dane są zliczane (przypisujemy to do zmiennej $czas_zliczanych). Adresu dokumentu ani IP nie przypisujemy do zmiennej, gdyż mamy je w odpowiednich zmiennych środowiskowych: $PHP_SELF i $REMOTE_ADDR.

 

<?php $host = "localhost"; $login = "mojLogin"; $haslo = "mojeHaslo"; $baza = "mojaBaza"; $limit = 60; $czas_aktualny = time(); $czas_zliczanych = $czas_aktualny - $limit;

 

Po przypisaniu do zmiennych potrzebnych nam danych, możemy wziąść się za cały mechanizm. Zaczynamy od zainicjowania połączenia z MySQL-em i wybraniu bazy dancyh.

 

mysql_connect($host, $login, $haslo); mysql_select_db($baza);

 

Dodajemy teraz informacji o osobie, która ogląda stronę na której umieszczamy skrypt - wywołującej go.

 

$dodaj = mysql_query("INSERT INTO IleOnline VALUES ('$czas_aktualny','$REMOTE_ADDR','$PHP_SELF)"); /* Tu możemy umieścić informację dla skryptu jak ma się zachować jeśli akcja się nie powiedzie itp. Np. if(!$dodaj) echo"Wystąpił błąd przy dodawaniu danych"; */

 

Usuwamy wpisy osób, które odwiedziły stronę wcześniej niż dopuszczone jest to przez ustalony limit.

 

$usun = mysql_query("DELETE FROM IleOnline WHERE czas<$czas_zliczanych"); /* Tu możemy umieścić informację dla skryptu jak ma się zachować jeśli akcja się nie powiedzie itp. Np. if(!$usun) echo"Wystąpił błąd przy usuwaniu danych"; */

 

Teraz przyszedł czas by pobrać informacje ile osób jest on-line. Mamy do wyboru dwie opcje - w całym serwisie bądź na tej stronie z której wywołany został skrypt. Oczywiści przy opcji cały serwis, liczone są wszystie strony na której umieszczony jest skrypt. Przypomnę, że do pobrania tylko i wyłącznie różnych wartości w SQL-u, służy słowo kluczowe DISTINCT.

 

$wynik_serwis = mysql_query("SELECT DISTINCT ip FROM IleOnline"); $wynik_strona = mysql_query("SELECT DISTINCT ip FROM IleOnline WHERE plik='$PHP_SELF'"); /* Tu możemy umieścić informację dla skryptu jak ma się zachować jeśli akcja się nie powiedzie itp. Np. if(!$wynik_serwis) echo"Wystąpił błąd przy pobieraniu danych dla całego serwisu"; if(!$wynik_strona) echo"Wystąpił błąd przy pobieraniu danych dla tej strony"; */

 

Zliczamy zwrócone wiersze, które dadzą nam liczbę osób przebywających on-line w naszym serwisie oraz na danej stronie.

 

$user1 = mysql_num_rows($wynik_serwis); $user2 = mysql_num_rows($wynik_strona); /* No i wyświetlamy wyniki na stronie */ If($user1 == 1) { print("$user1 osoba jest online w serwisie - jesteś nią Ty!n
"); } else { print("$user1 użytkowników jest online w serwisien
"); } If($user2 == 1) { print("$user1 osoba jest online na tej stronie - jesteś nią Ty!n
"); } else { print("$user1 użytkowników jest online na tej stronien
"); } ?>

 

W ten sposób możesz sprawdzać ilość osób online w całym Twoim serwisie jak i na konkretnej stronie. Do tego kodu można dopisać jeszcze wiele kodu ulepszającego jego działanie (rozpoznawanie IP przez proxy, lepszą obsługę błędów itp.) - w tym już Twoja głowa. Wszelkie pytania odnośnie systemu proszę kierować na forum.

Ocena 2.55/5 (51.09%) (238 głosów)

Komentarze:


  • Dodał: Gość data: 2009-12-16
  • Plik
    Dodał: Gość data: 2010-04-13
    Jak by to było jeszcze w jednym pliku do umieszczenie na stronie to by było super

  • Dodał: Gość data: 2010-10-24
    ja chciałby wiedzieć ile było otwarć mojej strony www
  • pytanie
    Dodał: adamolga@wp.pl data: 2010-10-24
    ja chciałby tylko wiedzieć ile było otwarć mojej strony www
  • odpowiedż @up
    Dodał: Gość data: 2016-07-21
    w bazie danych zrób tabelę w której będziesz miał kolumnę z liczbą osób, i wstaw kod php który przy każdym wejściu/załadowaniu strony od nowa wykona UPDATE ze zwiększeniem tej liczby o 1.


Dodaj komentarz:


Temat:
Twój nick:
Komentarz:
 

Prosimy o kulturę wypowiedzi. Komentarze zawierające niecenzuralne zwroty, bądź obrażające inne osoby będą usuwane. Kod HTML w wypowiedziach jest niedozwolony. Wydawca nie odpowiada za treść komentarzy.