Home > Programowanie, Webmastering > Klasyka PHP – licznik odwiedzin

Klasyka PHP – licznik odwiedzin

Dlaczego klasyka? Gdyż to chyba jeden z najpopularniejszych skryptów o jakich myśli każdy początkujący programista PHP. Fakt faktem, że przy dzisiejszych usługach typu Google Analytics jest to mało komfortowe rozwiązanie i nie dostarcza wielu informacji, nie mniej na pewno dużo satysfakcji :) .

Bez zbędnego przedłużania przechodzimy do sedna sprawy. Nasz licznik będzie maksymalnie uproszczony – będzie zliczał każde przeładowanie strony. Aby zbytnio się nie napracować skorzystamy z funkcji file_get_contents oraz file_put_contents do przechowania aktualnego stanu licznika w pliku.

Jak działa zatem prosty licznik? Pobiera z pliku ilość odsłon, dodaje 1, zapisuje i wyświetla aktualny stan.

$fn = 'data.txt';
$counter = (file_exists($fn) ? (int)file_get_contents($fn) : 0) + 1;
file_put_contents($fn, $counter);

I to już w zasadzie wszystko. Pierwsza linia określa nazwę pliku danych licznika. Druga odczytuje jego aktualny stan, o ile plik istnieje. Ostatnia zapisuje ponownie ilość osłon do pliku. W zmiennej $counter znajduje się ich aktualna ilość którą możemy umiejscowić gdzieś na stronie:

echo $counter;

Nasz licznik jest już gotowy. Cały kod możesz pobrać tutaj.

Dla ambitnych

Jeśli nie chcesz aby licznik zliczał każdą pojedynczą odsłonę, a jedynie użytkowników, to musimy pokusić się o skorzystanie z cookies (ciasteczek) przeglądarki.

Podobnie jak w przykładzie wyżej, nie jest to jakiś skomplikowany mechanizm i łatwo go obejść, ale spełnia swoje zadanie w minimum jakie od niego wymagamy.

$fn = 'data.txt';
$counter = file_exists($fn) ? (int)file_get_contents($fn) : 0;

$cookiename = 'simple_counter_d3v8';
if ( ! isset($_COOKIE[$cookiename]))
{
  file_put_contents($fn, ++$counter);
  setcookie($cookiename, '1', time()+60*60*24);
}

Jeśli użytkownik odwiedzi stronę, zapisujemy w jego przeglądarce ciasteczko. Przy kolejnej odsłonie tylko wtedy podwyższamy wartość licznika jeśli owo ciasteczko nie istnieje. Po 24h, odsłona tego samego użytkownika jest ponownie zliczana – można to regulować zmieniając liczbę sekund w trzecim parametrze funkcji setcookie.

Kompletny kod można pobrać tutaj.

  1. green96
    27 marca 2010 at 11:03 | #1

    Przechodzimy do sedna sprawy ;) taki mały błąd

  2. 27 marca 2010 at 11:20 | #2

    Dzięki, poprawione.

  3. arni
    27 marca 2010 at 17:08 | #3

    Problem pojawi się przy wielu wykonaniach naraz. Licznik będzie się resetował. Koniecznie dołóż flagę LOCK_EX

  4. 27 marca 2010 at 17:43 | #4

    Faktycznie, myślałem że file_put_contents to załatwia w opozycji do fopen/fwrite :\

  1. Brak jeszcze trackbacków