Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]kasująca się wartośc licznika
slaw.omir
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 10.08.2006

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


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. ?>
Go to the top of the page
+Quote Post
pgrzelka
post
Post #2





Grupa: Zarejestrowani
Postów: 313
Pomógł: 24
Dołączył: 9.08.2008
Skąd: Kielce

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


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
Go to the top of the page
+Quote Post
slaw.omir
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 10.08.2006

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


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. ?>
Go to the top of the page
+Quote Post
Maveral
post
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 8
Dołączył: 30.07.2005

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


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. ?>
Go to the top of the page
+Quote Post
slaw.omir
post
Post #5





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 10.08.2006

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


Niestety, po wstawieniu powyższego kodu,
i tak licznik co jakiś czas się kasuje
Go to the top of the page
+Quote Post
erix
post
Post #6





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




A sprawdzaj, czy za każdym razem jest coś w tablica.
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
bliitz
post
Post #8





Grupa: Zarejestrowani
Postów: 155
Pomógł: 12
Dołączył: 5.04.2008

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


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





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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

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: 2.10.2025 - 20:27