Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Licznik online
Forum PHP.pl > Forum > PHP
Ember
Witam. Wiem, że było już tysiące takich tematów, jednak nifgdzie nie znalazłem tego co potrzebuję. Jeżeli gdzieś taki był to sorry, usńcie temat.
Otóż napisałem skrypt na logowanie oparty na sesjach. I chciałbym teraz, abty wyświetlało mi ilość niezalogowanych użytkowników przebywających na stronie, oraz loginy tych zalogowanych. Zupełnie nie wiem, jak się za to zabrać. Będe wdzięczzny, jeżeli jakoś mi pomożecie.
Ember
Tak, tylko ze one wszystkie są na MySQL, a ja bym potrzebował coś bez bazy... o ile to mozliwe... żeby np. zapisywało użytkowników i ilość osób online do plików txt...
TomASS
Kolega Hwao kiedyś popełniłbył coś takiego. Jak przetesujesz to proszę Cię napisz czy (jak) działa.
Ember
Szczerze mówiąc to jestem dopiero początkujący w php, więc nie znam wszystkich komend, przez co nie mogę poprawić... Tak, wiem... manual, ale nei wszsytko kapuję...
Tak więc skrypt mógłby być oparty na czymś takim, że z wszsytkich otwartych sesji była by pobierana jakaś zmienna, i byłyby one wyświetlane... O ile to możliwe....
angerthor
Sam niedawno robilem taki skrypt i musze powiedzec ze w bazie danych jest xrazy prosciej cos takiego zrobic (jezeli chcesz moge podac Ci moj skrypt). Jezeli chodzi o pliki tekstowe to powinno pomoc przy zrozumieniu ogolnych zasad "jak to ma wygladac" http://www.strefaphp.net/topic144.html .

Jezeli chcesz dodatkowo wyswietlac ilosc gosci i nicki zarejestrowanych, to zapisujesz do pliku txt taki trojczlonowy wpis : ip_usera | nick_usera (jezeli jest zalogowany, jezeli nie to np. gosc) | czas -> dzieki funkcji time ( ) . Pozniej po prostu rozbijasz to explode, i liczysz wpisy gdzie nick_usera=gosc, a jezeli nick_usera!=gosc to wyswietlasz wartosc.

Pozdrawiam !
Ember
No więc zaczołem to robić tak, jak mi radziłeś angerthor, ale niestety zapisuje mi nawet, gdy już jestem zapisany... Oto kod:
  1. <?php
  2. session_start("ember");
  3. $plik = fopen('goscie.txt', 'r+');
  4. $dlugosc = filesize("goscie.txt");
  5. fread($plik, $dlugosc);
  6. $ip = $_SERVER['REMOTE_ADDR'];
  7. if (isset($online['$ip']))
  8.  {
  9. echo 'asdasd';
  10.  }
  11. else
  12.  {
  13. $czas = time() + (60 * 5);
  14. if (isset($_SESSION['status']))
  15.  {
  16. $gosc2 = $_SESSION['login'];
  17. $gosc = "\$online['$ip'] = $czas\n
  18. \$gosc2['$ip'] = $gosc2\n\n";
  19.  }
  20. else
  21.  {
  22. $gosc2 = "niezalogowany";
  23. $gosc = "\$online['$ip'] = $czas\n
  24. \$gosc2['$ip'] = $gosc2\n\n";
  25.  }
  26. fwrite($plik, $gosc);
  27.  }
  28. fclose($plik);
  29. ?>

I niestety zawsze mi dopisuje, niezależenie od tego, czy już jestem dodany czy nie. Jakieś propozycje?
angerthor
Po pierwsze dodawaj jakieś chociaż drobne komentarze do skryptu bo tak jest on bardzo nieczytelny.

Spójrz na mój stary skrypt dotyczący tego samego (ten skrypt "na początku" nawet jest dobry, tylko psuje sie przy wiekszej ilosc userow on-line, przez to, ze ma jakis blad przy zapisywaniu do pliku; dlatego nie chcialo mi sie juz go poprawiac i przerzucilem sie na sql, ) , ale mysle, ze zasada jak to ma wygladac jest jasno przedstawiona

  1. <?php
  2.  
  3. $nazwaPliku="katalog/log.txt";
  4. $minutnik=5; // Ilosc minut, przez ktore user bedzie wpisany
  5. $minutnik=$minutnik*60;
  6. $ip=$_SERVER['REMOTE_ADDR'];  // Ip usera
  7. $czas=time();
  8.  
  9. $numerWpisu=0;
  10.  
  11. // Badanie czy uzytkownik jest zalogowany czy nie
  12. if(isset($_SESSION['user'])) {
  13. $nick=$_SESSION['user'];
  14. }
  15. else $nick="gosc";
  16.  
  17.  
  18.  
  19.  
  20. $plik=file("$nazwaPliku");
  21.  
  22. $liczbaWpisow=count($plik);
  23.  
  24. // Jeżeli wpisów jest 0 to odrazu dodaje usera
  25.  if ($liczbaWpisow==0) { $wpis=$ip.":||:".$nick.":||:".$czas; }
  26.  
  27. // Jeżeli jednak plik log.txt nie jest pusty
  28.  else {
  29.  #sprawdzam czy w pliku jest juz user o takim ip
  30. for ($i=0;$i<$liczbaWpisow;$i++)
  31. {
  32. $tabela=explode(":||:",$plik[$i]);
  33.  $czasWejscia=$tabela[2];
  34.  $numerWpisu++;
  35. if ($ip==$tabela[0]) {
  36. $wpis=$tabela[0].":||:".$nick.":||:".$czas;
  37.  $poziom="jest";
  38. break;}
  39. }
  40. if ($poziom!=='jest') { $wpis=$ip.":||:".$nick.":||:".$czas; }
  41.  
  42.  
  43.  
  44.  #sprawdzam aktualnosc wszystkich spisow
  45. if ($poziom!=='jest') {
  46.  
  47.  for ($i=0;$i<$liczbaWpisow;$i++)
  48. {
  49.  $tabela=explode(":||:",$plik[$i]);
  50.  $plik[$i]=trim($plik[$i]);
  51.  $czasWejscia=$tabela[2];
  52. if ($czas-$czasWejscia < $minutnik ) {
  53. $wpisy[$i]=$tabela[0].":||:".$tabela[1].":||:".$tabela[2];
  54. $wpis = $wpis."\n".$wpisy[$i];}
  55. }
  56. }
  57.  
  58. elseif ($poziom=='jest') {
  59. for ($i=0;$i<$liczbaWpisow;$i++)
  60. {
  61.  $tabela=explode(":||:",$plik[$i]);
  62.  $plik[$i]=trim($plik[$i]);
  63.  $czasWejscia=$tabela[2];
  64. if ($czas-$czasWejscia < $minutnik AND $numerWpisu!==$i ) {
  65. $wpisy[$i]=$tabela[0].":||:".$tabela[1].":||:".$tabela[2];
  66.  $wpis = $wpis."\n".$wpisy[$i];}
  67. }
  68. }
  69.  
  70.  
  71. }
  72.  
  73.  
  74. $otworz=fopen("$nazwaPliku","r+");
  75. flock($otworz,2);
  76. fwrite($otworz,$wpis);
  77. flock($otworz, 3);
  78. fclose($otworz);
  79. ?>
Ember
Wielkie dzięki angerthor. Jeżeli pozwolisz to troche poprzerabiam skrypt i umieszce u siebie;d
EDIT
Dobra, poprzerabiałem i wszystko jest jak trzeba. Wielkie dzięki, p0zDr0
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.