Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Licznik odwiedzin... problem..., Samoistne zerowanie licznika :-(
*_ENIGMA
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 1.11.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam!

Otórz mam na stronie licznik odwiedzin i już drugi raz sam się wyzerował (plik z liczbą odwiedzin stał się pusty) :-/

Podaję swój skrypt, bo ja już nie wiem gdzie leży przyczyna :-/
CHMOD mam ustawiony pliku z wpisami licznika (licznik.dat) na 777.

Plik licznik.php (inkludowany: @include("index/licznik.php"); )
  1. <?php
  2.  
  3. $plik = "index/licznik.dat";
  4. $waga = @filesize($plik);
  5.  
  6. $fop = @fopen("$plik", "r");
  7. @flock($fop, 1);
  8. $czytaj_l = @fread($fop, $waga);
  9. @flock($fop, 3);
  10. @fclose($fop);
  11.  
  12. $czytaj_l++;
  13.  
  14. $fop = @fopen("$plik", "w");
  15. @flock($fop, 2);
  16. @fwrite($fop, $czytaj_l);
  17. @flock($fop, 3);
  18. @fclose($fop);
  19.  
  20. echo("$czytaj_l");
  21.  
  22. ?>


Proszę o podpowiedzi jaka może być przyczyna samoistnego zerowania się tego licznika...
Najciekawsze jest to, że dałem blokadę flock() do zapisu i odczytu a i tak się wyzerował :-/

Pozdrawiam

Ten post edytował *_ENIGMA 3.10.2005, 16:40:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
latet
post
Post #2





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 2.10.2005

Ostrzeżenie: (0%)
-----


Cytat(*_ENIGMA @ 2005-10-03 15:38:35)
Witam!
Otórz mam na stronie licznik odwiedzin i już drugi raz sam się wyzerował (plik z liczbą odwiedzin stał się pusty) :-/


Też tak miałem i zębami zgrzytałem. Ale doszedłem do przyczyny.
Winne jest otwieranie pliku w trybie "w". Zauważ, że zawartość pliku jest wtedy kasowana. Już wtedy, a więc jeszcze przed próbą założenia locka!

Ja doszedłem w końcu do tego co widać niżej. Zrób tak, a bedzie dobrze:

  1. <?php
  2.  
  3. $df="nazwaplikulicznika.txt";
  4. $krolicznika = 1; 
  5.  
  6.  
  7. if (file_exists($df))
  8. {  
  9.  
  10. if ($fp=@fopen($df, "r+")) // niedestrukcyjny tryb r+
  11. {
  12.  
  13. if( flock($fp, LOCK_EX)) // jesli sie uda sie zablokowac do zapisu
  14. {
  15. $count = intval(fgets($fp, 20)) + $krolicznika;  
  16. ftruncate($fp, 0); // wyczeszczenie zawartosci pliku
  17. fseek($fp, 0);  // pointer na poczatek pliku 
  18. fputs($fp, $count);  // zapis nowej liczby do licznika
  19. flock($fp, LOCK_UN);  // zdjecie blokady
  20. fclose($fp);
  21. echo $count;  // Wyswietlenie stanu licznika
  22. }
  23.  
  24.  else {
  25.  fclose($fp); // zamkniecie jesli nie mozna bylo zalozyc locka 
  26. }
  27.  
  28. }
  29.  
  30. else // jesli nie udało sie otworzyc pliku do zapisu (np. z powodu braku odp. uprawnien) 
  31. { echo "ERROR! Nie moge zapisywac do tego pliku!"; }
  32.  
  33. }
  34.  
  35.  
  36. else  // jesli plik $df licznika NIE istnieje - trzeba go stowrzyc
  37.  
  38. {  
  39.  
  40.  echo "Tworze nowy plik licznika. Prosze odwiezyc strone"; 
  41.  touch($df); // folder w ktorym ma powstac plik licznika musi miec atr. 777
  42.  chmod($df, 0666); // na wszelki wypdek
  43.  
  44. } 
  45.  
  46.  
  47. ?>


latet

Ten post edytował latet 4.10.2005, 22:34:01
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.10.2025 - 11:05