Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: licznik w liku tekstowym
Forum PHP.pl > Forum > Przedszkole
adif
witajcie...

domyślam się, że problem banalny ale proszę o sugestię...

Stworzyłem parę tygodni temu licznik oparty na prostym zapisie w pliku txt ilości wejść w postaci liczby.

Ktoś wchodzi i jeśli nie jest to odświeżenie wtedy pobieramy liczbę z pliku i zwiększamy ją o jeden, następnie plik zapisujemy z nową wartością.

Wydaje się banalne.

Oto kod:
  1. <?php
  2. if(!isset($_SESSION['licznik_odwiedzin']))
  3.    {
  4.        $_SESSION['licznik_odwiedzin']=1;
  5.        
  6.        $plik=@fopen("licznik.txt","r");
  7.        $licznik=@fgets($plik);
  8.        @fclose($plik);
  9.        settype($licznik, 'integer');
  10.        $licznik++;
  11.        $plik=@fopen("licznik.txt","w");
  12.        @fwrite($plik, $licznik);
  13.        @fclose($plik);
  14.        return $licznik;
  15.    }
  16.    //jeśli przeładowanie
  17.    else
  18.    {
  19.        $plik=@fopen("licznik.txt","r");
  20.        $licznik=@fgets($plik);
  21.        @fclose($plik);
  22.        return $licznik;
  23.    }
  24. ?>


I pewnie bym tu nic nie napisał, gdyby nie fakt, że jak dziś wszedłem na stronę z tym licznikiem okazało się, że licznik z niezrozumiałych do końca dla mnie powodów wyzerował się i zaczął liczyć od początku - nie wiem niestety ile zdążył naliczyć wcześniej.

W którym miejscu może tkwić problem?

Z góry dzięki
b4x
Ja bym zrobił to jakoś tak:

  1. <?php
  2.  
  3.    if(!isset($_SESSION['licznik_odwiedzin'])) {
  4.  
  5.        $_SESSION['licznik_odwiedzin'] = 1;
  6.        
  7.        $plik = file_get_contents('licznik.txt');
  8.  
  9.        if(!is_int($plik)) { $plik = 0; } // dla 'pustego' licznika.
  10.  
  11.        $licznik = $plik+1;
  12.  
  13.        file_put_contents('licznik.txt', $licznik);
  14.  
  15.    } else {
  16.  
  17.        return file_get_contents('licznik.txt');
  18.  
  19.    }
  20. ?>



A co do problemu - to może ktoś w tym samym momencie otworzył plik, w trakcie jego 'zapisywania' kolejna osoba otworzyła i otrzymała pusty plik - wtedy nadpisala i od 0
adif
w sumie dość trafna uwaga b4x. zastanawiałem się nad prawdopodobieństwem otwarcia strony w tym samym momencie przez co najmniej dwie osoby i wydało mi się to mało prawdopodobne, ale owszem istnieje taka możliwość.

Co zatem jeśli to jest powód wyzerowania?
b4x
@adif - ciężko jest coś z tym zrobić (taka wada operacji na plikach), na Twoim miejscu zastosowałbym jakąś bazę (jeśli masz taką możliwość).

Kilka linijek kodu - i jesteś spokojny ;-)
erix
Czekam na tag tematu.
adif
i tak też pewnie uczynię...

ech niestety kolejny raz życie udowadnia, że jak się idzie na łatwiznę (czyt. nie chciało mi się tworzyć bazy, a przecież kod do łączenia z nią zapewne byłby podobnie prosty i krótki jak do obsługi pliku) to ma się później za swoje smile.gif

dzięki b4x pozdrawiam
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.