Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Licznik tekstowy i problem
Forum PHP.pl > Forum > PHP
qarles
Witam bardzo serdecznie. Mam taki kod licznika:
Kod
<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=ISO-8859-2">
<meta name="Keywords" content=" futsal sport +, futsal sport plus, futsal sport, futsal malopolska, futsal małopolska, liga futsalu, futsal">

<title>Futsal Sport+</title>
<link rel="Shortcut icon" href="obrazki/icon.png" />
<link rel="Stylesheet" href="style.css" type="text/css">
</head>

<body>

<?php

function polnoc()
{
   $teraz = date("H:i:s");
   $czas = explode(":", $teraz);
   $godziny = 23-$czas[0];
   $minuty  = 59-$czas[1];
   $sekundy = 59-$czas[2];
   $waznosc = $godziny*3600 + $minuty*60 + $sekundy;
   return $waznosc;
}

        if((!strstr($_SERVER['HTTP_REFERER'], "www.futsalsportplus.pl")))
        {

                $plik = fopen("js/licznik.txt", "r");
                $tekst = fread($plik, filesize("js/licznik.txt"));
                $dane = explode(";", $tekst);
                fclose($plik);
                $plik = fopen("js/licznik.txt", "w");
                flock($plik, 2);
                $dane[0]++;
                fwrite($plik, "$dane[0];", 15);
                flock($plik, 3);
                fclose($plik);

        $data = date("Y-m-d");
        $dzienny=fopen("js/dzienny.txt","r");
        $dzienny_tekst =fread($dzienny, filesize("js/dzienny.txt"));
        $dane2 = explode(":", $dzienny_tekst);
        fclose($dzienny);
        
         $data2 = date("Y-m");
        $miesiac=fopen("js/miesiac.txt","r");
        $miesiac_tekst =fread($miesiac, filesize("js/miesiac.txt"));
        $dane3 = explode(":", $miesiac_tekst);
        fclose($miesiac);
        

        if($dane2[0]==$data)
      { $dane2[1]++;
                $dzienny=fopen("js/dzienny.txt","w");
                flock($dzienny, 2);
                fwrite($dzienny, "$dane2[0]:$dane2[1]:$dane2[2]:$dane2[3]", 30);
          flock($dzienny, 3);
          fclose($dzienny);
        }
        else
        { $dane2[2]=$dane2[0];
          $dane2[3]=$dane2[1];
          $dane2[0]=$data;
          $dane2[1]=1;
          $dzienny=fopen("js/dzienny.txt","w");
          flock($dzienny, 2);
          fwrite($dzienny, "$dane2[0]:$dane2[1]:$dane2[2]:$dane2[3]", 30);
          flock($dzienny, 3);
          fclose($dzienny);
        }
        
        if($dane3[0]==$data2)
      { $dane3[1]++;
                $miesiac=fopen("js/miesiac.txt","w");
                flock($miesiac, 2);
                fwrite($miesiac, "$dane3[0]:$dane3[1]:$dane3[2]:$dane3[3]", 30);
          flock($miesiac, 3);
          fclose($miesiac);
        }
        else
        { $dane3[2]=$dane3[0];
          $dane3[3]=$dane3[1];
          $dane3[0]=$data2;
          $dane3[1]=1;
          $miesiac=fopen("js/miesiac.txt","w");
          flock($miesiac, 2);
          fwrite($miesiac, "$dane3[0]:$dane3[1]:$dane3[2]:$dane3[3]", 30);
          flock($miesiac, 3);
          fclose($miesiac);
        }
        }
        else
        {
                $plik = fopen("js/licznik.txt", "r");
                $tekst = fread($plik, filesize("js/licznik.txt"));
                $dane = explode(";", $tekst);
                fclose($plik);

                $dzienny=fopen("js/dzienny.txt","r");
                $dzienny_tekst =fread($dzienny, filesize("js/dzienny.txt"));
                $dane2 = explode(":", $dzienny_tekst);
                fclose($dzienny);
                
                $miesiac=fopen("js/miesiac.txt","r");
                $miesiac_tekst =fread($miesiac, filesize("js/miesiac.txt"));
                $dane3 = explode(":", $miesiac_tekst);
                fclose($miesiac);
        }
?>
<center>
<div class="licznik">
<table width="100%" cellpadding=0><tr>
<td width="80px"><img src="obrazki/futsal1.png" width=80 height=90/></td>
<td>
<table width="150px" cellpadding=0><tr><td colspan=2 style="text-align:center"><font size=+1><center>Licznik odwiedzin:</center></font></td></tr>
<tr><td style="text-align:left" width="100">Dzisiaj:</td><td style="text-align:right"><b><?php echo($dane2[1]); ?></b></td></tr>
<tr><td style="text-align:left" width="100">W tym miesiącu:</td><td style="text-align:right"><b><?php echo($dane3[1]); ?></b></td></tr>
<tr><td style="text-align:left" width="100">Wszystkich:</td><td style="text-align:right"><b><?php echo($dane[0]); ?></b></td></tr></table></td></tr></table></div></center>
</body></html>



I niby wszystko pieknie wyglada ale niestety jest duuuzy problem z dzialaniem tego licznika, a mianowicie:
Gdy wejdę na stronę i zaczne trzymac F5(odswiezanie) to licznik wariuje: resetuje sie losowa liczba w pliku txt ktory tez jest losowy. Raz resetuje sie w dziennym, raz w miesieczny, a jeszcze kiedy indziej w ogolnym. Ale nie psuje sie tylko na F5 zauwazylem ze jak juz jest troche duzo odwiedzin to sie resetuje. czasem jest tak ze mam dzienny: 1500 a ogolny sie resetuje i jest np. 10.

Czy może mi ktoś doradzić, co musze zmienic w tym kodzie zeby prawidlowo dzialal i nie robil takich numerów??

Z góry dziękuję za pomoc
emajl22
sesje?
qarles
czyli co dokladnie?? bo niezbyt zrozumialem
Tomplus
Nie możesz zapisywać tego do bazy danych ?
Z sumujesz sobie potem odpowiednią przestrzeń dat np. wg. miesiąca, roku, sumy.

Możesz to zrobić nawet tak jak Ty masz:



nazwy kolumn tabeli _> dzien miesiac rok ogolny id data_aktualizacji
Updatujesz tylko jeden wiersz tabeli tylko każda z aktualną wartość +1
  1. UPDATE licznik SET dzien=dzien+1, miesiac=miesiac+1,rok=rok+1,ogolny=ogolny+1 WHERE id = 1;


Potem tylko sprawdzasz który dzien już jest:
i umieszczasz IF który resetuje tylko daną wartość
np. dzien = 0

qarles
wiem ze moznaby bylo na bazie danych, ale jesli o to chodzi to ja jednak wolalbym to miec na plikach txt i dlatego wlasnie napisalem z zapytaniem o to co tutaj moze powodowac to resetowanie...
Tomplus
Jeżeli się tak dzieje jak Ty mówisz, to po sprawdzałbym sobie dane które zapisujesz do pliku.
Jakie dane i kiedy są false.

Pewnie jakaś zmienna nie dostaje wartości.
qarles
tylko ze tu nie ma dokladnie kiedy... bo rozne zmienne w roznym czasie chyba dostaja false i dlatego idzie reset i nie wiem od czego zalezy kiedy on sie resetuje i jak naprawic
Tomplus
To dlatego musisz sprawdzić co wchodzi i co wychodzi.
qarles
juz kilka razy sprawdzalem i wyglada to calkiem wporzadku...

czy kktos jeszcze moze cos doradzic?? a jeśli nie to pomógłby mi ktoś napisać ten cały licznik (ogolny dzienny i miesieczny) w oparciu o mysql bo w temacie z mysqlem sie niezbyt pewnie czuje...
Pilsener
Licznik tekstowy zawsze będzie wątpliwie działał jeśli czas wysyłania żądań przekroczy czas zapisu do pliku smile.gif Pliki są fajne przy szybkim odczycie, przy zapisie odwrotnie.
Licznik odsłon to żadna filozofia, zapisujesz do bazy ip +czas a potem na podstawie tego co jakiś czas generujesz statystyki, skryptów na różne liczniki jest masa, wystarczy poszukać:
Temat: Scalenie zapytan i optymalizacja skryptu - tylko używać na własne ryzyko smile.gif Dzisiaj się używa zewnętrznych statystyk.
qarles
OK. Dzięki za link do tematu coś będę kombinował... Bo może rzeczywiście lepiej bedzie na baze:D

A mam jeszcze takie pytanie: Jak poustawiałeś pola w tabelach??
Chodzi mi o: ip, czas, osłon, wizyt
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.