Przejdź do treści
Cream Software
  • Start
  • Aplikacje
  • App Store
  • Google Play
  • O nas
  • Jak działamy
  • Blog
  • Kontakt
    • 🇵🇱 Polski
    • 🇺🇸 English
    • 🇵🇱 Polski
    • 🇺🇸 English

    Blog

    Gotowe przykłady – liczniki na www

    Opublikowano
    7 października 2002
    Aktualizacja
    27 marca 2023
    • PHP - Perl - mySQL
    • #php
    • #programowanie
    Gotowe przykłady – liczniki na www

    Autor: CEZI

    W pierwszym przykładzie opiszę licznik, który nie jest odporny na odświeżanie i zlicza każdą odsłonę witryny. Drugim przykładem będzie licznik, którego budowa pozwala blokować “sztuczne” nabijanie. Trzecim będzie licznik, który zlicza odsłony dzienne - pokazuje ile gości w danym dniu odwiedziło naszą witrynę.

    No więc do roboty!

    Przykład 1.

    Do prawidłowego działania licznika będzie nam potrzebne utworzenie pliku, w którym będą przechowywane wartości. Może to być plik z rozszerzeniem tekstowym (.txt) lub .dat lub też inny np. .cez. W tym przykładzie będzie to plik ‘licznik.txt’.

    Na samym początku określamy, gdzie ten plik ma się znajdować. Jeśli chcemy umieścić go w katalogu, piszemy odpowiednia ścieżkę, a jeśli nie, to możemy pominąć ten kawałek kodu. W tym przykładzie umieszczony plik będzie znajdował się w katalogu ‘odslony’.

    <? 
    $path="odslony/"; 
    
    // Utworzona została ścieżka do katalogu (ze slash na koncu /). Możemy również określić ścieżkę, nie przypisując zmiennej, lecz "normalnie" np. $zliczaj=file("odslony/licznik.txt"); Sposób pierwszy jest bardziej 'poręczny' kiedy musimy w skrypcie otwierać kilkakrotnie plik/pliki - wtedy wystarczy operować tylko tą zmienną. 
    
    $zliczaj=file($path."licznik.txt"); 
    
    // Zmiennej $zliczaj przypisujemy tablice pliku 'licznik.txt' (zostaje on załadowany do pamięci) 
    
    $stan_licznika=$zliczaj[0]+1; 
    
    // Zwiększamy stan pierwszej linii pliku o 1 i przypisujemy to zmiennej $stan_licznika 
    
    $zliczaj=fopen($path."licznik.txt","w"); 
    
    // Otwieramy plik do zapisu z jednoczesnym skasowaniem jego zawartości (pamiętamy że wartość zwiększona jest o 1 od poprzedniej wartości). 
    
    flock($zliczaj, 2); 
    
    // Blokujemy plik z dostępem do zapisu 
    
    fwrite($zliczaj,$stan_licznika); 
    
    // Zapisujemy w pliku stan zwiększony o 1 
    
    flock($zliczaj, 3); 
    
    // Zwolnienie blokady 
    
    fclose($zliczaj); 
    
    // Zamykamy plik 
    
    echo"$stan_licznika"; 
    
    // Wyświetlamy wynik (zmienna $stan_licznika zawiera wartość CAŁEJ pierwszej linii) 
    // Może to się wydawać dziwne, że pierwsza linia nie ma wartości 1 a 0, ale tak już jest - 0 to pierwsza linia, 1 to druga linia a np. linia 100 będzie miała wartość 101. 
    
    ?> 

    Gotowy skrypt licznika wygląda tak:

    <? 
    $path="odslony/"; 
    
    $zliczaj=file($path."licznik.txt"); 
    $stan_licznika=$zliczaj[0]+1; 
    $zliczaj=fopen($path."licznik.txt","w"); 
    flock($zliczaj, 2); 
    fwrite($zliczaj,$stan_licznika); 
    flock($zliczaj, 3); 
    fclose($zliczaj); 
    echo"$stan_licznika"; 
    ?> 

    Wynik możemy odpowiednio formatować, używając styli CSS.

    Przykład 2.

    Drugim przykładem jest licznik odporny na odświeżanie. W pierwszym skrypcie można naciskać klawisz F5 i za każdym razem wartość będzie zwiększana - w tym zastosujemy blokadę. Przykład samego licznika nie będzie się niczym różnił od pierwszego, lecz same jego wywołanie jest całkowicie inne. Zastosowałem tutaj dwie funkcje - pierwsza z nich (Cookie_OK()) będzie wykonana gdy już odwiedzono witrynę (kiedy skrypt już zadziałał dla tego użytkownika, nie później niż 24 godziny) natomiast druga zostanie wywołana kiedy odwiedzający wejdzie pierwszy raz lub ostatnie odwiedziny zostały zaliczone ponad dobę wcześniej.

    <? 
    $ile="time()+3600*24"; 
    
    // Czas przechowywania cookies // ustawione na 24 godziny 
    
    setcookie("odwiedziny","tak",$ile); 
    
    // ustawiamy cookies z wartością 'tak' 
    
    if($odwiedziny==$tak) 
    { 
       $licz=0; 
    } 
    else 
    { 
       $licz=1; 
    } 
    ?> 

    Ta część kodu sprawdza czy zmienne $odwiedziny i $tak są równe (znak == ), czyli czy zmienna $odwiedziny posiada wartość $tak i jeśli jest to prawdą, to w pierwszym przypadku zmienna $licz przyjmie wartość 0 a jeśli są różne to wartość 1.

    <? 
    $l="licznik.txt"; 
    $path="odslony/"; 
    
    // Wartość zmiennej $l to plik.txt w którym będą przechowywane odsłony. Zmienna $path (tak jak w pierwszym przykładzie licznika) określa ścieżkę do katalogu w którym znajduje się plik 'licznik.txt'. 
    
    function Cookie_OK() 
    
    // Tworzymy funkcję (nie będziemy podawali argumentów i zostawiamy nawiasy puste) 
    
    { 
    
    // Otwieramy nawias klamrowy funkcji 
    
     global $l,$path; 
    
    // Aby zmienne były widoczne w funkcji określamy zmienne globalne 
    
    $pokaz=fopen($path."$l","r"); 
    
    // Otwieramy plik do odczytu z parametrem "r" 
    
    flock($pokaz, 1); 
    
    // Blokujemy do odczytu 
    
    $linia=chop(fgets($pokaz, 100)); 
    
    // Pobieramy linie (100 znaków) 
    
    flock($pokaz, 3); 
    
    // Zwalniamy blokadę 
    
    fclose($pokaz); 
    
    // Zamykamy plik 
    
    echo $linia; 
    
    // Wyświetlamy 
    
    } 
    
    // Zamykamy funkcję klamrą 
    
    function Cookie_NO() 
    
    { global $l,$path;            
                  
                 $zliczaj=file($path."$l"); 
                 $stan_licznika=$zliczaj[0]+1; 
                 $zliczaj=fopen($path."$l","w"); 
                 flock($zliczaj, 2); 
                 fwrite($zliczaj,$stan_licznika); 
                 flock($zliczaj, 3); 
                 fclose($zliczaj); 
                 echo $stan_licznika; 
              
    } 
    
    // Tworzymy nową funkcję, która będzie odpowiedzialna za uruchomienie licznika i piszemy znany już kod. 
    
    if ($licz == "1") 
    {              
       Cookie_OK();          
    } 
    else 
    { 
        Cookie_NO(); 
    } 
    
    // Na samym końcu (taka jest reguła) wywołujemy funkcję Cookie_OK lub Cookie_NO zależnie od tego czy cookies istnieje czy też nie (w zależności jaką wartość przyjmie zmienna $licz). 
    
    // UWAGA: Nie wolno przed ustawieniem cookies wysyłać nic do przeglądarki ! - żadnych tagów html a pierwszy znacznik <? musi być ustawiony na samym początku ( nie może poprzedzać go enter) Jeżeli zobaczysz taki lub podobny komunikat: Warning: Cannot add header information - headers already sent by (output started ...[] to znaczy że wysyłasz coś przed ustawieniem cookies. 
    
    ?> 

    Cały skrypt wygląda następująco:

    <? 
    $ile="time()+3600*24"; 
    setcookie("odwiedziny","tak",$ile); 
    if($odwiedziny==$tak) 
    { 
       $licz=0; 
    } 
    else 
    { 
       $licz=1; 
    } 
    ?>  
    
    <? 
    $l="licznik.txt"; 
    $path="odslony/"; 
    function Cookie_OK() { 
    
     global $l,$path; 
    
    $pokaz=fopen($path."$l","r"); 
    flock($pokaz, 1); 
    $linia=chop(fgets($pokaz, 100)); 
    flock($pokaz, 3); 
    fclose($pokaz); 
    echo $linia; 
    } 
    
    function Cookie_NO() { 
     global $l,$path; 
                 $zliczaj=file($path."$l"); 
                 $stan_licznika=$zliczaj[0]+1; 
                 $zliczaj=fopen($path."$l","w"); 
                 flock($zliczaj, 2); 
                 fwrite($zliczaj,$stan_licznika); 
                 flock($zliczaj, 3); 
                 fclose($zliczaj); 
                 echo $stan_licznika;          
    } 
    if ($licz == "1") 
    {              
       Cookie_OK();          
    } 
    else 
    { 
        Cookie_NO(); 
    } 
    ?> 

    Przykład 3.

    Trzecim przykładem jest licznik, który zlicza odsłony na każdy dzień osobno. Zapewne spotkałeś się z czymś takim, widząc na stronach coś takiego “Dzisiaj odwiedzin: 123” i właśnie taki skrypt teraz zbudujemy.

    <? 
    
    $dzien=date("l"); 
    
    // Pobieramy funkcją date() aktualny dzień (zwraca nazwy w postaci: monday, tuesday itd.) 
    
    $dzien=strtolower($dzien); 
    
    // Ze względu na występowanie dużej litery w nazwie dni - zamieniamy na małą literę. 
    
    $path="dni/"; 
    
    // Określamy katalog dla pliku i ustawiamy pełne prawa (chmod 777). 
    
    $confirm=$HTTP_COOKIE_VARS["licz"]; 
    
    // Zmienna $confirm przechowuje wartość cookies pobrana przez tablice (będzie nam potrzebna do sprawdzenia) 
    
    $_temp=Array( 
         "monday" => "sunday", 
         "thuesday" => "monday", 
         "wednesday" => "thuesday", 
         "thursday"  => "wednesday", 
         "friday" => "thursday", 
         "saturday" => "friday", 
         "sunday" => "saturday" 
    ); 
    
    // Tworzymy pomocniczą tablice która wykorzystamy do zamiany. 
    
    for($i=0;$i<=$dzien;$i++){ 
    
    // Pętlą for() sprawdzamy jaki dzisiaj dzień liczony od 0 
    
    if(($dzien)&&(!@file_exists($path."$dzien.txt"))&&(!isset($confirm))) 
    { 
    
    // Pierwszy warunek: 
    // Jeśli zmienna $dzien zwraca nam TRUE i (znak &&) plik $dzien.txt (automatycznie dla zmiennej dzień zostaje przypisana wartość z pętli for() czyli dla lepszego zrozumienia: Jeśli mamy dzisiaj poniedziałek i zmienna $dzien będzie miała wartość 'monday' warunek sprawdzi, czy istnieje plik o nazwie 'monday.txt' i jeśli go nie ma - skrypt ustawi go automatycznie (ale to za chwilę w dalszym kodzie) 
    
    !isset($confirm); //  - isset() jest funkcją sprawdzającą czy zmienna czyli czy istnieje i posiada wartość a w tym przypadku sprawdza, czy zmienna $confirm (czyli cookies) nie istnieje (znak ! - negacji) i jeśli nie istnieje warunek wykona się (wykona się wszystko co znajduje się pomiędzy nawiasami klamrowymi). 
    
    // Teraz podaje kod dla tego warunku: 
    
    $ustaw=fopen($path."$dzien.txt","w"); 
    
    // Skrypt otwiera (w tym przypadku tworzy plik ponieważ wykrył że go nie ma) plik 
    
    chmod($path."$dzien.txt",0666); 
    
    // Ustawia chmod czyli prawa plikowi 
    
    fclose($ustaw); 
    
    // Zamyka plik 
    
    // Tak na prawdę to ten kod potrzebny jest, aby ustawić tylko plik (w tym momencie nic się z nim "nie dzieje") 
    
    $poniedzialek=file($path."$dzien.txt"); 
           $stan=$poniedzialek[0]+1; 
           $poniedzialek=fopen($path."$dzien.txt","w"); 
          flock($poniedzialek,2); 
           fwrite($poniedzialek,$stan); 
          flock($poniedzialek,3); 
           fclose($poniedzialek); 
    
    // Ten kod już znamy (kod licznika) 
    
    @unlink($path."$_temp[$dzien].txt"); 
    
    // Unlink() - funkcja usuwająca plik o danej nazwie - w tym przypadku tworzymy tablice asocjacyjna $_temp[$dzien].txt - czyli: $_temp[tutaj jest wstawiana wartość zmiennej $dzien czyli przykładowo  monday (dla poniedziałku)] ALE! w tablicy $_temp wartość zmieni się i dla 'monday' będzie 'sunday' monday => sunday (za każdym razem dzień do tyłu). Dodajemy rozszerzenie .txt, aby serwer usunął plik i w tym przypadku będzie to plik 'sunday.txt'. 
    
    // Znak @ oznacza, że nie będzie pokazany żaden błąd serwera (jeśli nie byłoby takiego pliku to nie wyświetli się błąd) 
    
    setcookie("licz","odslona",time()+3600*24); 
    
    // Ustawiamy cookie 
    
     echo "$stan"; 
    
    // Pokazujemy wynik 
    
    } 
    
    // Zamykamy pierwszy warunek. 
    
    // Jeśli z jakiegoś względu pierwszy warunek się nie wykona (np. istnieje już plik), to przechodzi "dalej" do drugiego warunku 
    
    elseif(($dzien)&&(@file_exists($path."$dzien.txt"))&&(!isset($confirm))) 
    { 
    
    // elseif oznacza, że jeśli nie to co w 'if', to sprawdź 'to co jest w elseif' (to tak na chłopski rozum:-)) 
    
    // Jeśli zmienne $dzien zwraca TRUE i plik już istnieje (ten w którym zostają zapisane odsłony), ale dalej nie istnieje cookies (!isset($confirm)) to wykonuje się ta część warunku zawarta pomiędzy klamrami. 
    
    $poniedzialek=file($path."$dzien.txt"); 
           $stan=$poniedzialek[0]+1; 
           $poniedzialek=fopen($path."$dzien.txt","w"); 
          flock($poniedzialek,2); 
           fwrite($poniedzialek,$stan); 
          flock($poniedzialek,3); 
           fclose($poniedzialek); 
          setcookie("licz","odslona",time()+3600*24); 
      echo $stan; 
    
    // Ten kod wykona się dla osoby która pierwszy raz wejdzie na stronę ale wcześniej już ktoś ją odwiedził ponieważ plik już istnieje. 
    
    } 
    
    // Zamykamy klamrę 
    
    elseif(($dzien)&&(@file_exists($path."$dzien.txt"))&& isset($confirm)) 
    { 
    // Ten warunek jest ostatnim i można by dać zamiast elseif() samo else() - ta funkcja wykona się wtedy i tylko wtedy kiedy nie wykonały się poprzednie. Czyli: 
    
    // Zmienna $plik zwraca TRUE, plik istnieje i cookies również. Tutaj wystarczy zastosować sam odczyt z pliku, pobrać jego wartość i wyświetlić 
    
    $plik=fopen($path."$dzien.txt","r"); 
    flock($plik, 1); 
    $line=chop(trim(fgets($plik,15))); // pobieramy 15 zanków 
    flock($plik, 3); 
    fclose($plik); 
    echo $line; 
    } 
    
    // Zamykamy klamrę warunku trzeciego 
    
    } 
    
    // Zamykamy pętlę 
    
    ?> 

    Cały przykład:

    <? 
    $dzien=date("l"); 
    $dzien=strtolower($dzien); 
    $path="dni/"; 
    $confirm=$HTTP_COOKIE_VARS["licz"]; 
    
    $_temp=Array( 
          "monday" => "sunday", 
         "thuesday" => "monday", 
         "wednesday" => "thuesday", 
         "thursday"  => "wednesday", 
         "friday" => "thursday", 
         "saturday" => "friday", 
         "sunday" => "saturday" 
    ); 
    
    
    for($i=0;$i<=$dzien;$i++){ 
    if(($dzien)&&(!@file_exists($path."$dzien.txt"))&&(!isset($confirm))) 
    { 
    
    $ustaw=fopen($path."$dzien.txt","w"); 
    chmod($path."$dzien.txt",0666); 
    fclose($ustaw); 
    
    $poniedzialek=file($path."$dzien.txt"); 
           $stan=$poniedzialek[0]+1; 
           $poniedzialek=fopen($path."$dzien.txt","w"); 
          flock($poniedzialek,2); 
           fwrite($poniedzialek,$stan); 
          flock($poniedzialek,3); 
           fclose($poniedzialek); 
    
    @unlink($path."$_temp[$dzien].txt"); 
    setcookie("licz","odslona",time()+3600*24); 
    echo "$stan"; 
    
    } 
    
    elseif(($dzien)&&(@file_exists($path."$dzien.txt"))&&(!isset($confirm))) 
    { 
    
    $poniedzialek=file($path."$dzien.txt"); 
           $stan=$poniedzialek[0]+1; 
           $poniedzialek=fopen($path."$dzien.txt","w"); 
          flock($poniedzialek,2); 
           fwrite($poniedzialek,$stan); 
          flock($poniedzialek,3); 
           fclose($poniedzialek); 
          setcookie("licz","odslona",time()+3600*24); 
      echo $stan; 
    
    } 
    
    elseif(($dzien)&&(@file_exists($path."$dzien.txt"))&& isset($confirm)) 
    { 
    
    $plik=fopen($path."$dzien.txt","r"); 
    flock($plik, 1); 
    $line=chop(trim(fgets($plik,15))); 
    flock($plik, 3); 
    fclose($plik); 
    echo $line; 
    
    } 
    } 
    ?> 

    Były to proste przykłady które możecie zastosować na swoich www. Myślę, że zrozumiałe.

    Powiazane aplikacje Cream Software

    Jesli ten temat jest Ci bliski, sprawdz nasze aplikacje i narzedzia.

    • Spider V6
    • Gonna Rain?
    • Money Gone?!
    • Heartie

    Kategorie

    • Grafika i foto na WWW
    • HTML i tworzenie stron
    • Internet
    • JavaScript VBScript Ajax
    • Mobile
    • Nowe wersje programów
    • Nowości w Cream Software
    • Odtwarzanie i konwersja filmów
    • Odzyskiwanie danych
    • Pająk
    • PHP - Perl - mySQL
    • Sprzęt
    • Style CSS
    • Wpis gościnny
    • Zamknięte projekty

    Nowoczesne aplikacje mobilne i desktopowe, które działają latami.

    Polityka prywatności | Regulamin | Kontakt

    © Cream Software. Wszelkie prawa zastrzeżone.

    Developed by cream.software

    Mierzymy wizyty bez analitycznych cookies. Po Twojej zgodzie używamy także analitycznych cookies. Szczegóły znajdziesz w Polityce prywatności.