Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błędy w kodzie? Licznik się zeruje.
Forum PHP.pl > Forum > PHP
Zagiewa
Witam. Mam problem i nie mam pojęcia co go powoduje. Mam napisany prosty licznik gości oparty na ciasteczkach. Licznik jest odporny na odświeżanie ale nalicza raz jeszcze jeśli np. zamkniemy przeglądarkę i uruchomimy ją raz jeszcze. Mi to wystarcza jednak nie wiedzieć czemu licznik co jakiś czas po prostu się zeruje. Nie mam pojęcia co może być powodem tym bardziej, że zerowanie jest zupełnie przypadkowe tzn. nigdy nie wiadomo kiedy i w jakich okolicznościach następuje. Prosił bym was o sprawdzenie kodu.
  1. <?php
  2.  
  3. $plik = "licz.txt";
  4. if (isset($_COOKIE['licznikgosci'])) {
  5.  
  6. $open = fopen($plik, "r");
  7. $wartosc = fread($open, filesize($plik));
  8. fclose($open);
  9. }else {
  10.  
  11. setcookie("licznikgosci", "1");
  12. $open = fopen($plik, "r");
  13. $wartosc = fread($open, filesize($plik));
  14. fclose($open);
  15. $wartosc = $wartosc + 1;
  16. $open = fopen($plik, "w");
  17. fwrite($open, $wartosc);
  18. fclose($open);
  19. }
  20.  
  21. ?>

Nie wiem czy to ma znaczenie ale dodam, że dla pliku są ustawione prawa na 644. Z góry dziękuję.
cudny
Przeglądarka Ci pożera ciacho, ot co biggrin.gif
Przecież ciastka wygasają...
Zagiewa
no rozumiem ale liczba jest zwiększana o 1 i zapisywana do pliku po czym jest odczytywana (z tego pliku) wiec nawet jak ciasteczko wygaśnie to chyba nie powoduje zerowania licznika? (usuwania wartości z pliku)
cudny
Skopiowane z manuala:
Note:
If you just want to get the contents of a file into a string, use file_get_contents() as it has much better performance than the code above.
Note:
Note that fread() reads from the current position of the file pointer. Use ftell() to find the current position of the pointer and rewind() to rewind the pointer position.

  1. $count = intval(trim(file_get_contents(file_get_contents('sciezka_do_pliku.txt'))));

Po wykonaniu analogicznie użyj: http://php.net/manual/en/function.file-put-contents.php


tongue.gif jak mogę coś dodac $wartosc = $wartosc + 1; === $wartosc++;
Necsord
filesize
Cytat
Note: The results of this function are cached. See clearstatcache() for more details.

Czyli w skrócie masz np. liczbę 200000 w pliku, a używasz do odczytu fread($open, 2).
Zagiewa
Odświeżam temat. Dopiero teraz bo za dużo pracy na głowie i ciężko było znaleźć chwile. Dziękuję za rady i obecnie kod wygląda tak. Proszę o ew. uwagi.
  1. <?php
  2.  
  3. if (isset($_COOKIE['licznikgosci'])) {
  4.  
  5. $wartosc = intval(trim(file_get_contents('licz.txt')));
  6. }else {
  7.  
  8. setcookie("licznikgosci", "1");
  9. $wartosc = intval(trim(file_get_contents('licz.txt')));
  10. $wartosc++;
  11. $dodaj = file_put_contents('licz.txt', $wartosc);
  12. }
  13.  
  14. ?>

cudny - wyczytałem, że funkcja file_get_contents jak i file_put_contents sama otwiera i zamyka pliki więc pozbycie się fopen, fclose no i fwrite było poprawne?
Uriziel01
Tak, sam kod jest teraz ok. Ale zdajesz sobie sprawę że w ten sposób przy wyłączonych cookies każdy request do serwera będzie interpretowany jako nowy odwiedzający ?
Zagiewa
Tak, tak jednak ideą było stworzyć prosty aczkolwiek funkcjonalny licznik, który w przybliżeniu poda liczbę odwiedzających. Druga sprawa to przeciętny kowalski instalując przeglądarkę nie wie nawet co to pliki cookies więc ich nie wyłącza. Nawet jeśli ktoś ma włączone (standardowo) ciasteczka to po wyłączeniu przeglądarki i uruchomieniu jej raz jeszcze znów licznik go nabije.
Dziękuję wszystkim za pomocą a szczególnie "cudny"
WiruSSS
Cytat(Zagiewa @ 21.03.2012, 20:59:21 ) *
Nawet jeśli ktoś ma włączone (standardowo) ciasteczka to po wyłączeniu przeglądarki i uruchomieniu jej raz jeszcze znów licznik go nabije.
Dziękuję wszystkim za pomocą a szczególnie "cudny"


...a niby dlaczego? przecież jak sobie ciastko ustawisz na rok to będzie tam siedzieć dopóki nie wygaśnie, lub go użytkownik sam nie usunie. W większosci przypadków ciastko będzie siedzieć dopóty, dopóki samo nie wygaśnie lub ktoś nie zmieni przeglądarki albo nie zrobi sobie reinstalacji systemu tongue.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.