Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]kasująca się wartośc licznika
Forum PHP.pl > Forum > Przedszkole
slaw.omir
Mam licznik i po jakimś czasie on kasuje swoją zawartość i on od nowa zaczyna zliczać wejścia na stronę, a chciałbym by cały czas liczył, przypuszczam że może to być spowodowane jak plik chce zapisać 2 wejścia na raz do pliku, jak to można rozwiązać?
Zastosowałem blokowanie pliku podczas zapisu ale i tak nie pomaga.

  1. <?php
  2. $sciezka='stat.txt';
  3.  
  4.    if(file_exists($sciezka)){
  5.        $tablica=file($sciezka);
  6.    }else{
  7.        $tablica=array(0);
  8.    }
  9.    
  10.    
  11.    if(!isset($_SESSION['nr_ip']))
  12.    {
  13.        $_SESSION['nr_ip']=$_SERVER["REMOTE_ADDR"];
  14.        $tablica[0]++;
  15.    }
  16.    
  17.    if ($plik=fopen($sciezka, 'wb'))
  18.    {
  19.        flock($plik,LOCK_EX);
  20.        fputs($plik,$tablica[0]);
  21.        flock($plik,LOCK_UN);
  22.        fclose($plik);
  23.    }
  24.    
  25. echo $tablica[0];
  26. ?>
pgrzelka
dopiero wstałem i jeszcze wolniej myślę ale...
wygląda na to że licznik się kasuje po zmianie ip, ponieważ zawsze sprawdzasz czy jest IP dla pierwszego rekordu tablicy, a powinieneś to w pętli sprawdzać,

ps. rozumiem że ten licznik ma zliczać ilość wejść z jednego ip,
bo jeśli chcesz licznik który po prostu zlicza ilość wszystkich wejść to usuń sprawdzanie ip, i po prostu dodawaj 1 do zawartości pliku
slaw.omir
To proponujesz zrobić to tak?

  1. <?php
  2. $sciezka='stat.txt';
  3.  
  4.   if(file_exists($sciezka)){
  5.       $tablica=file($sciezka);
  6.   }else{
  7.       $tablica=array(0);
  8.   }
  9. if(!isset($_SESSION['nr_ip']))
  10.   {
  11.       $_SESSION['nr_ip']=$_SERVER["REMOTE_ADDR"];
  12.       $tablica[0]++;
  13.   }
  14.  
  15. else  if ($plik=fopen($sciezka, 'wb'))
  16.   {
  17.       flock($plik,LOCK_EX);
  18.       fputs($plik,$tablica[0]);
  19.       flock($plik,LOCK_UN);
  20.       fclose($plik);
  21.   }
  22. ?>
Maveral
Po co ci w ogóle ten else if? Wystarczy tak:
  1. <?php
  2. $sciezka='stat.txt';
  3.  
  4.  if(file_exists($sciezka)){
  5.      $tablica=file($sciezka);
  6.  }else{
  7.      $tablica=array(0);
  8.  }
  9. if(!isset($_SESSION['nr_ip']))
  10.  {
  11.      $_SESSION['nr_ip']=$_SERVER["REMOTE_ADDR"];
  12.      $tablica[0]++;
  13.  
  14.      $plik=fopen($sciezka, 'wb');
  15.      flock($plik,LOCK_EX);
  16.      fputs($plik,$tablica[0]);
  17.      flock($plik,LOCK_UN);
  18.      fclose($plik);
  19.  }
  20.  echo $tablica[0];
  21. ?>
slaw.omir
Niestety, po wstawieniu powyższego kodu,
i tak licznik co jakiś czas się kasuje
erix
A sprawdzaj, czy za każdym razem jest coś w tablica.
phpion
Liczniki oparte na plikach mają to do siebie, że czasem faktycznie się zerują. Nie pomoże tu blokowanie plików. Jedynym rozsądnym wyjściem jest przejście na bazę danych, gdzie nie będziesz miał tego problemu.
bliitz
miałem dokładnie to samo, że licznik oparty na pliku co jakiś czas bez konkretnej przyczyny się kasował, pozostało przejście do bazy i teraz nie ma problemów
flashdev
Miałem też kiedyś problem z zerowaniem licznika, ale od kiedy korzystam z poniższego kodu nie ma już tego problemu.
  1. <?php
  2.  $plik = fopen("plik.txt","r");
  3.  flock($plik, LOCK_SH);
  4.  $licznik = fgets($plik);
  5.  flock($plik, LOCK_UN);
  6.  fclose($plik);
  7.  $licznik++;
  8.  
  9.  $plik = fopen("plik.txt","w");
  10.  flock($plik, LOCK_EX);
  11.  fwrite($plik, $licznik);
  12.  flock($plik, LOCK_UN);
  13.  fclose($plik);
  14.  echo "<!-- liczba odzwiedzin: ".$licznik." -->";
  15. ?>
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.