<font size="3">Wstęp</span>
W tym artykule chciałbym poruszyć sprawę licznika odwiedzin który zlicza 1 osobę tylko raz, niezależnie od tego ile razy strona zostanie odświeżona. Skrypt będzie się opierać na cookies. Przy wejściu na stronę będzie sprawdzał czy na komputerze jest zapisane cookie. Jeśli jest, licznik nie zapisuje Twojej wizyty. Jeśli nie ma, skrypt zapisuje cookie, oraz zapisuje wizytę.
<font size="3">Sposób wykonania</span>
Dla niewiedzących, do zapisywania cookie służy funkcja <font name="Courier New">setcookie</span>.
setcookie(nazwa, wartość, czas przechowywania na komputerze)
Oczywiście jest tam jeszcze trochę innych wiele wartości, ale nie będą nam potrzebne.
Wszystkie parametry oprócz nazwy są opcjonalne. Czas przechowywania jest datą wyrażoną w sekundach od 1 stycznia 1970 roku.
Teraz zabieramy się za licznik. Tworzymy dwa pliki: licznik.php i counter.n. Plik counter.n. zostawiamy pusty.
Wpisujemy teraz na początku pliku licznik.php:
<?
setcookie("visited", "1", time()+3600*3);
//Wysyła cookie na komputer użytkownika
?>
I koniecznie w następnych znacznikach kodu wpisujemy:
<?
if(file_exists("counter.n"))
{
//Sprawdza czy plik istnieje
$file=fopen("counter.n", "r"); // otwiera plik
flock($file, 1); // blokuje plik
$ile=fgets($file, 100);
//Odczytuje wartość z pliku counter.n
flock($file, 3); // odblokowywuje plik
fclose($file); //zamyka plik
if($_COOKIE["visited"]!="1")
//Sprawdza, czy użytkownik był na stronie
{
$ile++;
//Zwiększa wartość o jeden tylko po pierwszym wejściu
}
}
else
{
$ile=1; //jeśli plik nie istnieje, wyświetli się 1
}
$file=fopen("counter.n", "w"); // otwiera plik do zapisu
flock($file, 2); // blokuje do zapisu
fwrite($file, $ile); //zapisuje wartość
flock($file, 3); // odblokowuje plik
fclose($file); //zamyka plik
echo($ile); //Wyświetla wartość
?>
I to by było na tyle. Efekt możecie zobaczyć na stronie http://jarekx.110mb.com/4programmers/licznik.php
Przeprowadziłem mały test (1000 odwiedzin) i muszę z przykrością stwierdzić, że nie działa :D Oczywiście cookie mam włączone!
na oko moze to byc wina braku rozijania zmiennych powinno byc $_COOKIE["visited"] zamiast $visited.
Już poprawione :)
Można zapisać to prościej (krócej) i zarazem wydajniej; dodatkowo kod odporny na niepoprawną zawartość pliku licznika:
W sumie dałoby się ładniej napisać, ale późno jest i mi się nie chce ;P
Fajny skrypt. Prosty, funkcjonalny i do ogarnięcia przez początkujących.
Po drobnych modyfikacjach wykorzystałem go na swojej stronie: http://www.fourup.pl
Dziękuję.