Statystyki z klasą

Język PHP pozwala nam uzyskać sporo informacji o naszych gościach: dowiemy się, jakich przeglądarek i systemów operacyjnych używają osoby odwiedzające witrynę, w jakich godzinach mamy najwięcej wizyt itp.

Po pierwsze: dane

Stworzenie statystyki musi być poprzedzone zebraniem materiału do analizy. Z pewnością interesują nas data i godzina odwiedzin. Z tym nie ma problemów – w momencie otwarcia strony zapiszemy aktualny czas do bazy danych.

Drugą ważną informacją jest liczba podstron odwiedzonych w czasie jednej wizyty w naszej witrynie. Będzie z tym mały kłopot, gdyż w protokole HTTP połączenie jest automatycznie kończone po przesłaniu z serwera pliku do użytkownika. Sesja ogranicza się do nawiązania połączenia, wysłania zapytania do serwera, odebrania odpowiedzi i zakończenia połączenia. Strona zbudowana z trzech plików będzie wymagała nawiązania trzech połączeń z serwerem. Posługując się mechanizmem “ciasteczek”, możemy pokonać tę przeszkodę, udając, że sesja trwa aż do momentu zamknięcia przeglądarki.

Bardzo użyteczny w statystykach jest numer IP użytkownika, gdyż pozwala na jego identyfikację przy kolejnych wizytach. Możemy go pobrać ze zmiennej $_SERVER[‘REMOTE_ADDR’]. Nie jest to jednak pełny identyfikator, gdyż czasami łącze bywa współdzielone i z jednego numeru IP korzysta wiele osób. Aby precyzyjniej zidentyfikować użytkownika, zapiszemy na jego dysku “ciasteczko” o nazwie stat_id. Dzięki temu będziemy mogli się przekonać, ilu użytkowników łączy się z danego numeru IP.

Istotną informację przesyła przeglądarka użytkownika w czasie “przedstawiania się” serwerowi. Poznajemy wtedy typ i wersję browsera, a także system operacyjny, z którego użytkownik korzysta. Te dane zawiera zmienna $_ SERVER[‘HTTP_USER_AGENT’] .

Ostatnia informacja, którą umieścimy w bazie, pochodzi ze zmiennej $_SERVER[‘HTTP_REFERER’]. Mówi ona o tym, z jakiej strony użytkownik trafił na nasz dokument.

Gra w klasy

Program generujący statystyki będziemy musieli włączyć do każdego skryptu na naszej witrynie. Do licznika odwiedzin odwołamy się dzięki funkcji require(). Ponieważ chcemy uniknąć ewentualnego konfliktu związanego z takimi samymi nazwami zmiennych lub funkcji w różnych skryptach, skorzystamy z możliwości udostępnianych przez programowanie obiektowe i klasy, czyli twory zawierające własny zestaw funkcji i zmiennych. Zdefiniujmy najpierw klasę, która posłuży nam do nawiązania łączności z bazą danych:

class Baza {
var $host;
var $uzytkownik;
var $haslo;
var $nazwa;
function Baza() {}
function open() {}
function create() {}
}

Nasza klasa zawiera cztery pola (zmienne) oraz trzy funkcje (metody). Zmienne występujące wewnątrz klasy muszą być poprzedzone słowem var. Nazwy funkcji open() i

create()

pochodzą od poleceń języka SQL, które w nich zastosujemy. Funkcja Baza() celowo ma tę samą nazwę co klasa. Jest ona tzw. konstruktorem, czyli metodą, która zostanie automatycznie wykonana podczas pierwszego uruchomienia obiektu. Po wykonaniu instrukcji zawartych w konstruktorze obiekt pozostaje w pamięci komputera aż do zakończenia działania całego skryptu, dzięki czemu mamy dostęp do jego pól oraz metod.

Zdefiniowana przez nas klasa nie jest gotowym obiektem, a jedynie jego szablonem. Gdyby posłużyć się analogią do budowania zamku z klocków, to klasa byłaby jedynie formą, która posłuży do produkcji klocków danego typu. Posługując się jedną formą, wyprodukujemy dowolną liczbę klocków. Podobnie możemy stworzyć dowolną liczbę obiektów należących do jednej klasy, uruchamiając je w pamięci komputera. Kopia taka nazywana jest instancją klasy i musi być przyporządkowana zmiennej. Tworzenie nowej instancji klasy Baza polega na wydaniu instrukcji $baza=new Baza(); .

Po stworzeniu obiektu możemy w skrypcie odwoływać się do jego metod dzięki komendzie $baza->open();. Jako separator pomiędzy nazwą instancji a jej wewnętrzną funkcją służy strzałka zbudowana z myślnika i znaku większości. W identyczny sposób odwołujemy się do zmiennych znajdujących się wewnątrz instancji, np.

$baza->host=’localhost’;

.

Nie wpisaliśmy jeszcze treści funkcji występujących wewnątrz klasy Baza. Pora na nadrobienie tej zaległości:

class Baza {
var $host;
var $uzytkownik;
var $haslo;
var $nazwa;
function Baza() {
$this->host=”localhost”;
$this->uzytkownik=””;
$this->haslo=””;
$this->nazwa=”test”;}
function open() {
mysql_connect($this->host,$this->
uzytkownik,$this->haslo);
mysql_select_db($this->nazwa);
}
function create() {
mysql_connect($this->host,$this->
uzytkownik,$this->haslo);
$q=”CREATE DATABASE IF NOT EXISTS “.
$this->nazwa.”;”;
$r=mysql_query($q);
mysql_select_db($this->nazwa);
}}

Metoda Baza() ustala jedynie początkowe wartości zmiennych. Bardzo często do tego się właśnie sprowadza rola konstruktora.

Więcej:bezcatnews