Jak zrobić licznik osób online w PHP PDF Drukuj Email
Wpisał doctor   
Sobota, 29. Maj 2010 14:41

Artykuł ten pokazuje zasadę działania i budowę licznika gości online na stronie www.Problem ten jest często poruszany na wielu forach, część webmasterów także chciałoby mieć taki licznik na swojej stronie.Zapraszam do lektury.

Na jakich serwerach licznik osób online będzie pracował?
Na wszystkich serwerach, które obsługują php.Nic więcej do działania licznika nie jest potrzebne. Licznik można wstawić na dowolną stronę, przykładowo zbudowaną w technologii html.Wystarczy wkleić tylko kod licznika:

<iframe src="usersonline.php" width="170" height="50" frameborder="0" scrolling="auto"></iframe>

Zasada działania licznika gości online
Zasada jest następująca: każde wejście na stronę (bądź jej przeładowanie) skutkuje pobraniem przez skrypt adresu IP odwiedzającego wraz z datą odwiedzin (co do sekundy).Następnie ta para danych (adres IP-czas wejścia) jest dopisywana do asocjacyjnej tablicy zmiennych w PHP.Oczywiście pod warunkiem, że wcześniej nie było wejścia z danego adresu IP.Ostatni krok to zliczenie ilości elementów tablicy funkcją count.Dla potrzeb przykładu ustalamy, że sumowane będą wizyty wszystkich odwiedzających w ciągu ostatnich 5 minut, czyli 300 sekund.

Programujemy!
Jak widać z fragmentu kodu wyżej, kod licznika umieścimy w pliku usersonline.php.Omówię teraz krok po kroku funkcje składowe licznika.Na początek pobierzemy od odwiedzającego dwie dane kluczowe dla działania licznika - adres ip oraz czas wejścia.

$myip = $_SERVER['REMOTE_ADDR'];
$czas = time();

Licznik osób online korzysta z dwóch dodatkowych plików tekstowych.Powinny one mieć uprawnienia do zapisu.Pierwszy z tych plików tekstowych nazywa się ostatniczas.txt i służy tylko i wyłącznie do przechowywania czasu ostatniego załadowania strony przez dowolnego odwiedzającego.

$plik1 = fopen("ostatniczas.txt","w");//zapis czasu ostatniego przeladowania
fwrite($plik1, $czas);
fclose($plik1);

Czas ten jest przechowywany w zmiennej $plik1, a jest w formacie Unix stamp.



Tablicę adresów IP userów wraz z odpowiadającym im czasem wejścia będziemy przechowywać w pliku online.txt.Plik ten ma następującą strukturę:

95.71.123.82|1275139959
3.5.7.19|1275140164

gdzie:
każda linia to osobny wpis,
adres IP oddzielony jest od czasu wizyty znakiem |.

W pliku online.txt znajdują się tylko wpisy z ostatnich 5 minut.Wartość tę można dowolnie zmienić.

Odczyt gości online z pliku odbywa się następująco:

//***odczyt ilosci userow online z tablicy
$online = file_get_contents("online.txt");
$ile=0;
$online2 = explode("\r\n", $online);
$ile = count($online2);
echo "<h3>Users online: " . $ile."</h3>";
//koniec ilosci odczytu userow

Następnie stworzymy sobie zmienną boolowską $czyjuz, mówiącą o tym, czy w ciągu ostatnich 5 minut dany user odwiedził już tą stronę czy nie.

//***zapis ip usera do tablicy
$czyjuz = false;
$visitors = array();
$ipadres = array();

Omówmy teraz sposób zapisu unikalnego odwiedzającego do bazy, czyli naszego pliku online.txt.

foreach($online2 as $element)
{
$linia = explode("|", $element);
$odczytip = $linia[0];
$odczytczas = $linia[1];
$ipadres[] = $odczytip;//do szukania unikalnego ip
//*** oczyszczenie tablicy z userow majacych czas > 5 min
if($czas-$odczytczas <=300)//maksymalnie
$visitors[$odczytip]=$odczytczas;

//zapis userow online do pliku
$plik = fopen("online.txt","w");
$licznikpom1=0;
foreach($visitors as $klucz => $linia7)
{
    if($licznikpom1!=0)
fwrite($plik, "\r\n");
fwrite($plik, $klucz);
fwrite($plik, "|");
fwrite($plik, $linia7);
$licznikpom1++;
}
fclose($plik);
}

W zmiennej $online2 znajdują się wpisy unikalnych odwiedzających wraz z odpowiadającym im czasem wejścia.Bieżemy każdą linię z osobna i rozdzielamy ją na 2 składniki rozdzielone znakiem | za pomocą funkcji explode.Po tej operacji adres ip gościa będziemy mieli w zmiennej $odczytip, a odpowiadający mu czas wejścia w zmiennej $odczytczas.
Dla celów pomocniczych stworzymy sobie także tablicę $ipadres, zawierającą wszystkie adresy ip odwiedzających.Posłuży ona do sprawdzenia, czy odwiedzający o danym ip już odwiedzał daną stronę.Dalej, przepisujemy z powrotem te dane (ip, czas wejścia) do tablicy, ale tylko dla użytkowników z przeciągu ostatnich 300 sekund.Z tablicy następnie do pliku (bo fopen z parametrem w umieszcza wskaźnik strumienia na początek pliku).Następnie sprawdzamy, czy adres ip odwiedzającego był już wcześniej zapisany do tego pliku.

$wynik = array_search("$myip", $ipadres);
if($wynik)//jesli adres istnieje
$czyjuz=true;

Jeśli tak było, to zmienna boolowska $czyjuz jest ustawiona.Natomiast jeśli nie było, to trzeba zapisać ip nowego odwiedzającego do bazy wraz z odpowiadającym mu czasem wejścia.

if($czyjuz==false)//adres odwiedzajacego nie istnieje
{
$visitors[$myip]=$czas;
$ileadresow = count($visitors);
//zapis userow online do pliku
$plik = fopen("online.txt","w");
$licznikpom2=0;
foreach($visitors as $klucz => $linia7)
{
    if($licznikpom2!=0)
fwrite($plik, "\r\n");
fwrite($plik, $klucz);
fwrite($plik, "|");
fwrite($plik, $linia7);
$licznikpom2++;
}
fclose($plik);
}

I to wszystko! Cały kod programu.Zachęcam do testowania i modyfikacji powyższego kodu.

Komentarze
Dodaj nowy Szukaj
+/-
Napisz komentarz
Nick:
E-mail:
 
Strona www:
Tytuł:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Proszę wpisać kod antyspamowy widoczny na obrazku.
GodRed   |95.49.41.xxx |2010-07-20 16:45:06
Dziękówa za to

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Ostatnia aktualizacja: Sobota, 29. Maj 2010 15:24
 
 

Losowy obraz

b13.jpg

Gościmy

Naszą witrynę przegląda teraz 7 gości 




| | | |