Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: prosty licznik odwiedzin odporny na odświeżanie
Forum PHP.pl > Forum > Przedszkole
endrju
  1. <?php
  2. $ippierwsze = $_SERVER[&#092;"REMOTE_ADDR\"]; 
  3. $czas = time();
  4. $sekundy = 86400;
  5. $dane = file(&#092;"wpisy.txt\");
  6. $ile_wpisow = count($dane); 
  7. for($i = 0; $i < count($dane); $i++);
  8. {
  9. $info = explode(&#092;"||\", $dane[$i]);
  10. if($info[0] == $ippierwsze&&$sekundy >= ($czas - $info[1]):
  11. fopen(&#092;"licznik.txt\", \"a\");
  12. $file = file(&#092;"licznik.txt\");
  13. $ile = count($file);
  14. echo (&#092;"Odwiedzin: $ile\");  
  15. else:
  16. $time = time();
  17. $ip = $_SERVER[&#092;"REMOTE_ADDR\"]; 
  18. $plik = fopen(&#092;"licznik.txt\", \"a\");
  19. fwrite($plik, &#092;"$ip||$timen\");
  20. fclose($plik);
  21.  
  22. fopen(&#092;"licznik.txt\", \"a\");
  23. $file = file(&#092;"licznik.txt\");
  24. $ile = count($file);
  25. echo (&#092;"Odwiedzin: $ile\");
  26. endif;
  27. }
  28.  
  29.  
  30.  
  31. ?>


problem polega na tym że skrypt ma problem w linii z instrukcją warunkową if?questionmark.gif jak to przekształcić żeby działało?

a jeszcze jedno... czy pętla for będzie działała aż znajdzie w pliku licznik.txt podane warunki czy trzeba zrobić to inaczej?
eS...
  1. <?php
  2.           $ippierwsze =  $_SERVER[&#092;"REMOTE_ADDR\"]; 
  3.           $czas = time();
  4.           $sekundy = 86400;
  5.           $dane = file(&#092;"wpisy.txt\");
  6.           $ile_wpisow = count($dane); 
  7.           for($i = 0; $i < count($dane); $i++);
  8.           {
  9.           $info = explode(&#092;"||\", $dane[$i]);
  10.           if($info[0] == $ippierwsze && $sekundy >= ($czas - $info[1])){
  11.           fopen(&#092;"licznik.txt\", \"a\");
  12.           $file = file(&#092;"licznik.txt\");
  13.           $ile = count($file);
  14.           echo &#092;"Odwiedzin:\".$ile;   
  15.          } else{          
  16.           $time =  time();
  17.           $ip =  $_SERVER[&#092;"REMOTE_ADDR\"]; 
  18.           $plik = fopen(&#092;"licznik.txt\", \"a\");
  19.           fwrite($plik, &#092;"$ip||$timen\");
  20.           fclose($plik);
  21.           
  22.           fopen(&#092;"licznik.txt\", \"a\");
  23.           $file = file(&#092;"licznik.txt\");
  24.           $ile = count($file);
  25.           echo &#092;"Odwiedzin:\". $ile;
  26.           }
  27.           }
  28.           
  29.           
  30.           
  31.           ?>



moze tak?
endrju
no niestety cały czas ma problem z tą instrukcją, wyświetla Parse Error, chodzi konkretnie o linię nr 10...

może wyjaśnię dokłądnie o co mi chodziło...

warunek pierwszy jest taki że ip pobrane na bierząco jest porównywane do ip z pliku, który jest czytany, natomiast drugim warunek jest taki, że liczba sekund przez cały dzień (86400) musi być większa bądź równa różnicy sekund od roku 1970 i liczby sekund pobranej z pliku...

i nie za bardzo wiem co tu jest nie tak?questionmark.gif
eS...
hmm nie bardzo kumam smile.gif ale to moze po nocy przed kompem smile.gif

ale jeśli chcesz licznik odporny na odswiezanie to moze poprostu wysylaj klientowi ciastko ustawiona na jakiś czas (np. time()3600*24) i sprawdzaj sobie, jesli gosc byl przed chwilka na stronie to nie dodaje nic do licznika a jesli nie byl i nie ma ustawionego ciastka to dopisuje 1 do wartosci licznika
  1. <?php
  2.  
  3. if($_COOKIE['cos']==&#092;"1\"){
  4. //nie zalicza bo cookie ma wartosc 1
  5. }else{
  6. //jesli nie ma ciastka to ustawia je i dodaje 1 do licznika
  7. setcookie(&#092;"cos\",\"1\",time()3600*24);
  8. //a tutaj dalej kod ktory dodaje wartosc do licznika
  9. }
  10. ?>

moze tak bedzie prosciej smile.gif
p.s
z "setcookie" moglem cos pokrecic smile.gif ale jak co to setcookie" title="Zobacz w manualu PHP" target="_manual
pozdrawiam
BENY_PL
Popieram pomysł eS...'a sam tak zrobiłem na swojej stronce.
endrju
  1. <?php
  2.           $ippierwsze =  $_SERVER[&#092;"REMOTE_ADDR\"]; 
  3.           $czas = time();
  4.           $sekundy = 86400;
  5.           $dane = file(&#092;"wpisy.txt\");
  6.           $ile_wpisow = count($dane); 
  7.           for($i = 0; $i < count($dane); $i++);
  8.           {
  9.           $info = explode(&#092;"||\", $dane[$i]);
  10.           if($info[0] == $ippierwsze && $sekundy >= ($czas - $info[1])):
  11.           fopen(&#092;"licznik.txt\", \"a\");
  12.           $file = file(&#092;"licznik.txt\");
  13.           $ile = count($file);
  14.           echo (&#092;"Odwiedzin: $ile\");   
  15.           else:          
  16.           $time =  time();
  17.           $ip =  $_SERVER[&#092;"REMOTE_ADDR\"]; 
  18.           $plik = fopen(&#092;"licznik.txt\", \"a\");
  19.           fwrite($plik, &#092;"$ip||$timen\");
  20.           fclose($plik);
  21.           
  22.           fopen(&#092;"licznik.txt\", \"a\");
  23.           $file = file(&#092;"licznik.txt\");
  24.           $ile = count($file);
  25.           echo (&#092;"Odwiedzin: $ile\");
  26.           endif;
  27.           }
  28.           
  29.           
  30.           ?>


małe sprostowanie -> ten kod (powyżej) działa... ale mimo tego że moim zdaniem zamieściłem odpowiednie warunki to i tak przy odświeżaniu liczba odsłon zmienia się... jestem rozpaczony...

nie wiem może trzeba pokombinować trochę z kolejnościąquestionmark.gif?
switch
Ja również polecam wysłanie cookie dla oglądającego. Z IP jest ten problem, że jeżeli np 100 kompów z jednej siecii będzie oglądac tę stronę to licznik nie odświeży się, gdyż potraktuje to jako jeden komp. Jest też sprawa praktyczna. Taki zapis można skrócić do kilku wierszy a potem iść na piwo cool.gif
BENY_PL
Poza tym urzytkownicy o zmiennym IP, tak jak np ja mogą co chwila restartować połączenie i już mają inne IP. Cookies też można usunąć - ale w praktyce niewiele osób to robi.
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.