Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ilosc osob na stronie
Forum PHP.pl > Forum > Przedszkole
robin101
Witam. Chcialbym zrobic na swojej stronie informacje ile osob aktualnie oglada moja strone. W jaki sposob mozna to zrobic?
e4you
  1. <?
  2. $minut=20;
  3. $teraz=time()+60*$minut;
  4. $bazaip = file(&#092;"ip.txt\");
  5. $ile=count($bazaip);
  6. $ip = $_SERVER[&#092;"REMOTE_ADDR\"];
  7.  
  8. for ($i=0;$i<$ile;$i++) {
  9.  $pol = explode(&#092;"`\",$bazaip[$i]);
  10.  if ($pol[2]<time()) {$bazaip[$i]=&#092;"\";}
  11.  if ($pol[1]==$ip) {
  12.  $bazaip[$i]=&#092;"`$ip`$teraz`n\"; $jest=1;
  13.  }
  14. }
  15.  
  16. if ($jest<>1) $bazaip[]=&#092;"`$ip`$teraz`n\";
  17. $f = fopen(&#092;"ip.txt\",\"w\");flock($f,2);
  18. for ($i=0;$i<$ile+1;$i++) {
  19. if ($bazaip[$i]<>&#092;"\") { fwrite($f, $bazaip[$i]); $ileip++;}
  20. }
  21. flock($f,3); fclose($f);
  22.  
  23. echo $ileip;
  24. ?>



ALBO


  1. CREATE TABLE useronline (
  2. timestamp int(15) DEFAULT '0' NOT NULL,
  3. ip varchar(40) NOT NULL,
  4. file varchar(100) NOT NULL,
  5. PRIMARY KEY (timestamp),
  6. KEY ip (ip),
  7. KEY file (file)
  8. );


  1. <?php 
  2. //wypełniamy podstawowe dane o bazie
  3. $server = &#092;"localhost\"; 
  4. $db_user = &#092;"nazwa_uzytkownika\"; 
  5. $db_pass = &#092;"haslo\"; 
  6. $database = &#092;"users\"; 
  7. $timeoutseconds = 300; 
  8.  
  9. //pobieramy aktualny czas
  10. $timestamp = time(); 
  11. $timeout = $timestamp-$timeoutseconds; 
  12.  
  13. //łšczymy się z bazš danych
  14. mysql_connect($server, $db_user, $db_pass); 
  15.  
  16. //zapisujemy dane do bazy
  17. $insert = mysql_query(&#092;"INSERT INTO useronline VALUES
  18. ('$timestamp','$REMOTE_ADDR','$PHP_SELF')&#092;"); 
  19. if(!($insert)) { 
  20. print &#092;"ERROR > \"; 
  21. } 
  22.  
  23. //usuwamy dane, jeżeli goœć opuszcza naszš stronę
  24. $delete = mysql_query(&#092;"DELETE FROM useronline WHERE timestamp<$timeout\"); 
  25. if(!($delete)) { 
  26. print &#092;"ERROR > \"; 
  27. } 
  28.  
  29. //pobieramy wyniki
  30. $result = mysql_query(&#092;"SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'\"); 
  31. if(!($result)) { 
  32. print &#092;"ERROR > \"; 
  33. } 
  34.  
  35. //liczba wierszy = liczba osób online
  36. $user = mysql_num_rows($result); 
  37.  
  38.  
  39. //wyœwietlamy wyniki
  40. if($user == 1) { 
  41. print(&#092;"$user goœć onlinen\"); 
  42. } else { 
  43. print(&#092;"$user goœci onlinen\"); 
  44. } 
  45. ?>
robin101
Dzieki. Dziala tak jakbym chcial smile.gif
yeti
Hmm, rejestracja IP jest zawodna. A co z zawodnikami, którzy chodzą na tym samym IP?
Nie jestem specem od sieci, ale wydaje mi się, że np. klienci kablówki na IP prywatnym mają jeden i ten sam numer IP na zewnątrz.
robin101
Dokladnie tak jest ale daje to chociaz orintacyjna ilosc. Zreszta mysle ze malo prawdopodowbe jest zeby na moja strone weszlo kilka osob spod tego samego IP. Ale jakby ktos wiedzial jak mozna to poprawic to bylbym wdzieczny.
ET
Ja też jestem zainteresowany tym tematem, ale chomi troszke o coś innego, dałem osoobny topik to sie moderator wkurzył wiec napisze jeszcze raz tutaj.


Jak zrobić żeby się dało sprawdzić kto jest aktualnie zalogowany na stronie i ile osob jest niezalogowanych. Chodzi mi o takie coś ja np jest na tym forum, wiadomo kto jest w taej chwili na forum, ile osób jest niezalogowanych.
6 użytkownik(ów) aktywny(ch) przez ostatnie 5 minut
3 gości, 3 użytkownik(ów) 0 ukryty(ch)

Wydaje mi się że to trzeba odpowiedznio powiązać z sesjami.

I niechodzi mi o to żeby mi ktoś suchy kod podawał tylko poprostu konstrukcje takiego skryptu opisał. Byłbym wdzięczny za odpowiedź.
yeti
Z zalogowanymi nie ma problemu, skoro ich uwierzytelniłeś, możesz zarejestrować, że są online. A niezarejestrowani, cóż, ja robię to tak, że zapisuję ID sesji zamiast IP.

Więc w naszym przypadku:
1. podczas uwierzytelniania rejestrujesz ID sesji dla każdego logującego się na stronę
2. zapisujesz ID sesji każdego wchodzącego (do tabeli DB , może być taka jak podał e4you), który się nie zalogował (jak się zaloguje to go wywalasz stąd i dajesz do uwierzytelnionych)
3. podczas wyswietlania czyścisz tych, którzy przekroczyli timeout i sprawdzasz ilość zapisanych ID sesji ale różnych od aktualnie zapisanych w tabeli uwierzytelnionych.

robin101 jest to nawet bardzo prawdopodobne, bo np. pół warszawskiej asterki zasuwa na tym samym IP
ET
Dzięki yeti, o coś takiego mi chodziło exclamation.gif!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.