Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Błędy w kodzie? Licznik się zeruje.
Zagiewa
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


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ę.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
cudny
post
Post #2





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


Przeglądarka Ci pożera ciacho, ot co (IMG:style_emoticons/default/biggrin.gif)
Przecież ciastka wygasają...
Go to the top of the page
+Quote Post
Zagiewa
post
Post #3





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


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)

Ten post edytował Zagiewa 15.03.2012, 22:14:53
Go to the top of the page
+Quote Post
cudny
post
Post #4





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


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


(IMG:style_emoticons/default/tongue.gif) jak mogę coś dodac $wartosc = $wartosc + 1; === $wartosc++;

Ten post edytował cudny 15.03.2012, 22:34:15
Go to the top of the page
+Quote Post
Necsord
post
Post #5





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

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


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).

Ten post edytował Necsord 15.03.2012, 22:33:15
Go to the top of the page
+Quote Post
Zagiewa
post
Post #6





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


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?
Go to the top of the page
+Quote Post
Uriziel01
post
Post #7





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


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 ?
Go to the top of the page
+Quote Post
Zagiewa
post
Post #8





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


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"
Go to the top of the page
+Quote Post
WiruSSS
post
Post #9





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

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


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 (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post

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: 9.10.2025 - 07:05