Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> licznik w liku tekstowym, wyzerowanie licznika
adif
post 6.04.2009, 21:33:50
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 12.06.2005

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


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
Go to the top of the page
+Quote Post
b4x
post 6.04.2009, 21:44:39
Post #2





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


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


--------------------
Go to the top of the page
+Quote Post
adif
post 6.04.2009, 21:52:47
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 12.06.2005

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


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?
Go to the top of the page
+Quote Post
b4x
post 6.04.2009, 21:58:54
Post #4





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


@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 ;-)


--------------------
Go to the top of the page
+Quote Post
erix
post 6.04.2009, 22:02:54
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Czekam na tag tematu.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
adif
post 6.04.2009, 22:07:13
Post #6





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 12.06.2005

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


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

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:51