Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Licznik się resetuje
Forum PHP.pl > Forum > Przedszkole
Korson
Witam.

Mam mały problem z licznikiem. Co jakiś czas resetował mi się plik w którym przechowywana jest liczba odwiedzin mojej strony. Zaczęło mnie to zastanawiać, więc zapuściłem kilka przeglądarek i zrobiłem masowe odświeżanie, w czasie które licznik "zdychał" sad.gif

Kod licznika wygląda następująco:
  1. <?php 
  2. setcookie("count", "1", time()+3600*24);
  3.  if($_COOKIE['count']!="1"){ 
  4.  $plik=fopen("zmienne/licznik_data.txt", "r"); 
  5.  $licznik=fgets($plik); 
  6.  fclose($plik); 
  7.  $licznik++; 
  8.  $plik=fopen("zmienne/licznik_data.txt", "w"); 
  9.  fwrite($plik, $licznik); 
  10.  fclose($plik); 
  11.  } else { 
  12.  $plik=fopen("zmienne/licznik_data.txt", "r"); 
  13.  $licznik=fgets($plik);
  14.  fclose($plik); 
  15.  } 
  16.  ?>


Będę bardzo wdzięczny za pomoc.
phpion
Problem resetowania często występuje w przypadku plików tekstowych. Dzieje się tak pewnie wtedy gdy licznik obsługuje 2 żądania w tym samym czasie (lub z niewielką różnicą czasową). Późniejsze żądanie pobiera dane licznika w momencie gdy pierwsze otwiera plik w trybie w+. Chyba najsensowniejszym wyjściem będzie oparcie licznika odwiedzin na bazie danych. Ja w ten sposób wyeliminowałem problem czyszczenia wskazania licznika.

PS: flock() nie pomagało
Korson
niestety nie mogę podpiąć bazy pod ten licznik, zostają mi tylko i wyłącznie pliki tekstowe. Wiem że da sie temu zapobiec bo kumpel miał podobny problem, stąd pomysł z massem przeglądarek. On się go pozbył. Wtedy powiedział mi że woli aby nie zliczyło mu odwiedzenia niż czyściło licznik. Kontakt niestety z nim jest obecnie nie możliwy... Więc pomyślałem że tutaj zapytam.

Chodzi chyba o to aby zablokować skrypt, lub licznik w momencie jego wykonywania się przez jednego użytkownika i odblokować po zakończonej operacji. Problem polega na tym że nie mam zielonego pojęcia jak to zrobić.
Hazel
Spróbuj z flock()" title="Zobacz w manualu PHP" target="_manual i jej opcjami, jeśli nie masz innego wyjścia (Pan z góry pisał, że nie pomogło, ale mi czasem pomagało w takich skryptach, zależy od konfiguracji)...
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.