Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt liczący ilość wejść w ciągu 24h - a resetuje się co X czas
Forum PHP.pl > Forum > PHP
spielman
Cześć, mam skrypt który zlicza ilość unikalnych wejść na moją stronę w ciągu 24h, wszystko fajnie ale nie resetuje się co 24h tylko co mniej, na razie raz zresetował się po 12h raz po połtorej, ktoś widzi jakiś problem? dodatkowo chciałbym by nie zerował się co 24h (tak jak jest dotychczas) tylko by usuwał adresy IP które są dłużej niż 24h i żeby była taka płynna wymiana, ale to drugoplanowo, najbardziej zależy mi by naprawić działanie skryptu smile.gif
  1. <?php
  2.  
  3. //add_comment.php
  4.  
  5. $plik = "online_24.txt";
  6. $czas = 24*60*60;
  7. $t = time();
  8. $ip=$_SERVER['REMOTE_ADDR'];
  9. $u = explode("\n", str_replace("\r", "", @join("", @file($plik))));
  10. foreach($u as $i => $v) {
  11. $e = explode("|", $v);
  12. if($e[0] == $ip || $e[1] < $t) unset($u[$i]);
  13. }
  14. $u[] = $ip . "|" . ($t + $czas);
  15. $fp = fopen($plik, "w");
  16. flock($fp, 2);
  17. fputs($fp, join("\n", $u));
  18. flock($fp, 3);
  19. fclose($fp);
  20. $output='<span class="icon-user-2" >24h: '.count($u).'</span>';
  21. echo $output;
  22. ?>
dublinka
Przeciez masz tam warunek mowiacy ze jesli ip jest takie samo jak w pliku LUB czas zapisany w pliku jest mniejszy od aktualnego czasu to ma usunac zawartosc.
Wiec jesli wejdziesz z tego ip po minucie czy godzinie czy sekundzie nawet jak czas nie uplynie to wpisy sie usuna. Jesli chcesz aby dwa warunki sie spelnialy musisz zamienic || na &&
spielman
Cytat(dublinka @ 29.12.2020, 16:54:23 ) *
Przeciez masz tam warunek mowiacy ze jesli ip jest takie samo jak w pliku LUB czas zapisany w pliku jest mniejszy od aktualnego czasu to ma usunac zawartosc.
Wiec jesli wejdziesz z tego ip po minucie czy godzinie czy sekundzie nawet jak czas nie uplynie to wpisy sie usuna. Jesli chcesz aby dwa warunki sie spelnialy musisz zamienic || na &&


Mógłbyś wysłać cały kod z twoją poprawką? bo ja nie wiem dokładnie w którym miejscu mam zmienić a nie za bardzo znam się w php, i pytanie czyli jak zrobię tą zmianę o której mówisz to powinien ten licznik działać już poprawnie? w sensie co 24h reset?
dublinka
  1. $ip && $e[1]


Sens tego jest taki ze zapisuje sie ip i czas w postaci unixowego stempla czasu ( timestamp ) Czyli ciąg znaków jaki minął od 1//1/1970 do momentu az odpalisz skrypt plus wlasnie doba wliczona w sekundach.
Jesli zmienisz znak || na && to dwa warunki musza sie spelnic. Czyli IP i (tutaj nastepuje sprawdzenie czy czas zapisany+doba jest mniejszy od aktualnego pobranego z f. time() ) Jesli IP odwedzajacego bedzie cały czas takie samo i czas wiekszy od aktualnego to kazda odslona spowoduje dodanie się nowej linii. Jesli IP bedzie inne ale czas tez wiekszy od aktualnego to tez doda sie nowa linia.
Obydwa warunki musza sie spelniac. Jesli zmienisz tzn zostawisz to tak jak jest to wystarczy ze za kazdym razem kiedy wywolasz plik z takiego samego ip wtedy beda dane sie usuwaly nawet jak czas jeszcze "zyje"

Odpowiadajac na pytanie o reset. Nie nie bedzie.

W takiej formie z && usuniecie nastapi przy tym samym ip i czasie ktory uplynie
spielman
Cytat(dublinka @ 29.12.2020, 23:09:29 ) *
  1. $ip && $e[1]


Sens tego jest taki ze zapisuje sie ip i czas w postaci unixowego stempla czasu ( timestamp ) Czyli ciąg znaków jaki minął od 1//1/1970 do momentu az odpalisz skrypt plus wlasnie doba wliczona w sekundach.
Jesli zmienisz znak || na && to dwa warunki musza sie spelnic. Czyli IP i (tutaj nastepuje sprawdzenie czy czas zapisany+doba jest mniejszy od aktualnego pobranego z f. time() ) Jesli IP odwedzajacego bedzie cały czas takie samo i czas wiekszy od aktualnego to kazda odslona spowoduje dodanie się nowej linii. Jesli IP bedzie inne ale czas tez wiekszy od aktualnego to tez doda sie nowa linia.
Obydwa warunki musza sie spelniac. Jesli zmienisz tzn zostawisz to tak jak jest to wystarczy ze za kazdym razem kiedy wywolasz plik z takiego samego ip wtedy beda dane sie usuwaly nawet jak czas jeszcze "zyje"

Odpowiadajac na pytanie o reset. Nie nie bedzie.

W takiej formie z && usuniecie nastapi przy tym samym ip i czasie ktory uplynie


Dzięki, sprawdzę jutro czy zadziała smile.gif

@dublinka, a masz może pomysł jak zrobić zliczanie ze wszystkich podstron, nie tylko ze strony na której jest skrypt?
dublinka
Jak nke umiesz sam to sciagnij jakis skrypt do statystyk
spielman
Cytat(dublinka @ 30.12.2020, 17:27:59 ) *
Jak nke umiesz sam to sciagnij jakis skrypt do statystyk


Nie umiem znaleźć właśnie takiego po ip który zlicza ze wszystkim podstron :/
dublinka
Z tego co sie orietuje to musisz kod podawac na kazdej z oodstron. Skad skrypt ma wiedziec kto, gdzie wszedl.
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.