Zliczanie kliknięć w PHP

Autor: Wojciech Jurewicz, dodano: 25-07-2003
Kategoria: Programowanie i tworzenie

Jeżeli potrzebujesz skryptu który będzie zliczał ilość kliknięć w dany link, oparty na plikach tekstowych, to ten artykuł tłumaczy dokładnie jak taki napisać.

Zajmiemy się skryptem do zliczania kliknięć opartym na pliku txt. Tym razem sprawa jest bardzo prosta, więc nie skorzystamy z obiektów tylko zbudujemy jedną prostą funkcję. Na początek oczywiście kilka założeń:

Założenia:

-> skrypt korzysta z jednego pliku tekstowego -> dane będą zapisywane w jednej linii (php nie ogranicza długości linii i tak będzie wygodniej) -> dane zapisane w pliku będą miały format nazwa strony - ilość kliknięć -> jako separatora użyjemy dwóch znaków "|"

Funkcja licz:

Na dobry początek trzeba się zastanowić jak wyciągać nazwę pliku na którym aktualnie operuje skrypt. Użyjemy do tego zmiennej $PHP_SELF która przechowuje adres aktualnego pliku. No ale my chcemy nazwę pliku bez adresu... użyjemy do tego funkcji basename(), która zwraca nazwę pliku z podanej ścieżki. Jedna aby skorzystać ze zmiennej $PHP_SELF trzeba ją określić jako globalną, użyjemy do tego słowa kluczowego global. I jeszcze jedna sprawa, jako że nasz skrypt może wystąpić w kilku miejscach (tzn. pod różnymi adresami) określimy w funkcji jeden parametr którym będzie adres do pliku tekstowego, ale ustawimy dla niego wartość domyślną, czyli taką która będzie najczęściej występowała. Funkcję nazwałem w przykładzie licz(). Ok, tak wygląda to co przed chwilą założyliśmy:

<?php function licz( $pliktxt = './licz.txt' ) { global $PHP_SELF; $aktualny = basename( $PHP_SELF );



teraz wypada sprawdzić czy plik tekstowy który ma przechowywać dane istnieje, wykorzystamy do tego funkcję file_exists(), a jeżeli nie istnieje to go utworzymy przy pomocy funkcji fopen() z drugim atrybutem "w":

if (!file_exists( $pliktxt ) ) { fopen( $pliktxt, 'w' ); }



dobrze, teraz trzeba wczytać plik, wykorzystamy funkcję file():

$plik = file( $pliktxt );



teraz trzeba oddzielić kolejne pozycje w pliku. Ustaliliśmy że separatorem będzie "||", a jako że wszystko jest w pierwszej linii pliku, musimy odczytać pierwszą linię, wygląda to tak:

$strony = explode( '||', $plik[0] );



gdy już mamy swoje dane, trzeba je jakoś elegancko przepisać. Nazwy plików umieścimy w indeksach tablicy $wynik, a ilość kliknięć w wartości. Nazwa pliku jest oddzielona od liczby znakiem "-", w kodzie wygląda to tak:

foreach( $strony AS $wartosc ) { $elementy = explode( '-', $wartosc ); $wynik[$elementy[0]] = $elementy[1]; }



jak już mamy porządek, zwiększymy ilość kliknięć w odpowiednim pliku poprzez inkrementację, a jeżeli pliku wcześniej nie było w danych, to utworzymy nowy zapis z wartością jeden "1":

if ( $wynik[$aktualny] ) { $wynik[$aktualny]++; } else { $wynik[$aktualny] = 1; }



mamy już wszystko co mieliśmy zmodyfikować, teraz trzeba to odpowiednio zapisać, wszystko zapiszemy do zmiennej $doZapisu, pamiętając o znaku "-" pomiędzy nazwą strony a liczbą, oraz o znaku "||" pomiędzy kolejnymi wpisami, oczywiście zmienną $doZapisu przed użycie wypada zainicjować jako pustą kolejne pozycje tablicy $wynik trzeba sprawdzać czy coś zawierają, ponieważ z pliku mogły być wczytane puste wiersze:

$doZapisu = ''; foreach( $wynik AS $index => $element ) { if ( $index and $element ) { $doZapisu .= "$index-$element||"; } }



na koniec trzeba wszystko zapisać. Otwieramy plik z parametrem "w" aby został wyczyszczony, gdyż zapisujemy wszystkie dane od początku:

$fp = fopen( $pliktxt, 'w' ); fwrite( $fp, $doZapisu ); fclose( $fp );



i zamykamy deklarację funkcji:

} ?>



Teraz wystarczy dołączyć plik z funkcją na stronie do której prowadzi link który chcemy zbadać i wywołać funkcję licz():

<?php include('./inc/licz.php'); licz('./inc/licz.txt'); ?>



zauważ że funkcja licz() musi mieć podaną ścieżkę do pliku (w każdym wywołaniu do tego samego) txt w którym trzyma dane, chyba że podana domyślnie jest w tym wypadku dobra.

Funkcja wyswietl:

Teraz jeszcze prościutka funkcja która nam to wszystko wyświetli. Podobnie jak wtedy będzie akceptowała opcjonalny argument w postaci ścieżki do pliku z danymi. Odczytywać i porządkować dane będzie identycznie jak w funkcji licz(), więc nie będę tego objaśniał:

<?php function wyswietl( $pliktxt = './licz.txt' ) { $plik = file( $pliktxt ); $strony = explode( '||', $plik[0] ); foreach( $strony AS $wartosc ) { $elementy = explode( '-', $wartosc ); $wynik[$elementy[0]] = $elementy[1]; }



teraz z danymi można zrobić co nam się podoba, ja np. teraz je wypiszę:

foreach( $wynik AS $index => $wartosc ) { if ( $index and $wartosc ) { echo "$index - $wartosc <br>"; } }



i oczywiście zamykamy deklarację funkcji:

} ?>



i gotowe. Ty naturalnie możesz zrobić z tablicą $wynik co ci się podoba, w indeksach są nazwy plików, a w wartościach ilość kliknięć. Jeżeli chcesz zapisywać całe adresy, to w miejscach gdzie napisałem:

basename( $PHP_SELF )



napisz samo:

$PHP_SELF



i będzie ok, ale to już twój wybór. I to już wszystko...

Ocena 2.87/5 (57.46%) (346 głosów)

Komentarze:

  • Pytanie
    Dodał: Crookee data: 2012-09-04
    Jak zrobić aby klikniecie było liczone na jednego usera.. coś oparte na cookie, mysql, ip..?



Dodaj komentarz:


Temat:
Twój nick:
Komentarz:
 

Prosimy o kulturę wypowiedzi. Komentarze zawierające niecenzuralne zwroty, bądź obrażające inne osoby będą usuwane. Kod HTML w wypowiedziach jest niedozwolony. Wydawca nie odpowiada za treść komentarzy.