Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] mega prosty licznik odwiedzin, a jednak zawodny
marcinek37
post
Post #1





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


  1. <?
  2. $file = fopen('counter.txt', 'r'); $counter = (int)fgets($file); fclose($file);
  3. if($_SESSION['opened'] != '1'){ $counter++; $file = fopen('counter.txt', 'w'); fwrite($file, $counter); fclose($file); $_SESSION['opened'] = '1'; }
  4. ?>


raz na jakiś czas nie zapisuje wartości i liczy od nowa... ale dlaczego? jak można temu zaradzić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
stealz
post
Post #2





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.01.2010

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


Ok, zgadzam się. Ale tylko po części : )
Musiałem sprawdzić. Nie myślałem, że dopisywanie danych do dużego pliku przez file_put_contents jest tak wolne.
Z mojego testu wynika, że odczytywanie stanu licznika przez filesize() jest prawie 5x szybsze. Natomiast zwiększanie jego stanu w przypadku zasugerowanego przeze mnie algorytmu - od 2 do 4 razy wolniejsze.
Ponieważ kolega chce, aby zwiększenie licznika nastąpiło tylko raz w ciągu sesji, to z obliczeń, które poczyniłem wynika, że jeżeli użytkownik odwiedzi średnio 15 i więcej podstron, wówczas opcja z filesize() jest szybsza.

I jeszcze jedno: LOCK_EX. Jeżeli jeden użytkownik zablokuje dostęp do pliku przy podanym przez Ciebie file_put_contents($file,$content,LOCK_EX), wówczas drugi użytkownik w ciągu tych kilku milisekund nie ma dostępu do odczytu jego wartości linijkę wyżej. Odczytana wartość będzie równa '' i licznik zostanie wyzerowany. LOCK powinien nastąpić przed odczytaniem danych.

Ten post edytował stealz 29.11.2012, 01:18:03
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: 30.12.2025 - 12:09