Prosty moduł do zbierania danych o wejściach na serwis internetowy (PHP)

Wersja z plikiem tekstowym
Moduł składa się z pliku stats.inc.php zawierającego prosty mechanizm zapisywania podstawowych danych o internaucie odwiedzającym nasz serwis (datę i godzinę odwiedzin, adres IP, stronę z której do nasz dotarł (referer), nazwę podstrony serwisu, którą odwiedził oraz identyfikator przeglądarki). Dane te, rozdzielone znakiem tabulacji, są zapisywane do zwykłego pliku tekstowego (niedostępnego z poziomu przeglądarki, tak by nikt nieupoważniony nie mógł go odczytać) w postaci jednego wiersza tekstowego.

Użycie tego modułu jest bardzo proste i sprowadza się do załączenia pliku stats.inc.php:
    require_once($_SERVER['DOCUMENT_ROOT'].'/stats.inc.php');
Oczywiście trzeba zadbać, by załączany moduł znajdował się w wyżej wymienionej ścieżce i by ta ścieżka była poza folderem z naszym serwisem internetowym.

Powyższy moduł przetwarza URL oglądanego serwisu i zapamiętuje ustaloną jej część (patrz opis zdefiniowanych stałych na początku skryptu). W moim przypadku serwis jest zbudowany na bazie drzewa katalogów, dlatego jeśli zapamiętam sobie ścieżkę złożoną z ostatnich 3 katalogów, to będę dokładnie wiedział, na jakiej stronie internauta był.
W przypadku innych serwisów, np. opartych na niezależnych plikach .php (których nazwa jest znacząca - tj. jednoznacznie określająca podstronę serwisu), trzymanych w tym samym katalogu, można przerobić ten moduł tak, by zapisywał on tylko samą nazwę pliku (skryptu).

Do wyświetlania zabranych danych służy skrypt stats.php, który tutaj jest pozbawiony fragmentu autoryzacji (którego używam by nikt inny nie miał wglądu do tych danych).
Dane są wyświetlane w prostej tabeli. Dla zapewnienia większej czytelności dłuższe teksty (referer i user agent) są skracane, a ich pełną wartość można uzyskać po najechaniu myszką na zawierające te dane komórki.

Skrypt jest bardzo prosty i nie ma możliwość sortowania czy filtrowania tych danych (np. ukrywania odwiedzin botów/crawlerów) ani pokazywania prostych statystyk (wykresów) - zaimplementowałem to w poniższej nowej wersji skryptu (w dużej mierze przy użyciu kodu JavaScript).

Zbierane tu dane nie zawierają niektórych ciekawych i przydatnych informacji jak np. używana przez internautę rozdzielczość ekranu i głębia kolorów - te dane można uzyskać tylko po stronie przeglądarki klienta np. za pomocą JavaScriptu, co trochę skomplikuje taki moduł, bo trzeba go napisać w JS i w nim zrobić wysyłanie stosownych danych do serwera przy pomocy technologii AJAX.

Wersja z bazą danych MySQL
Ponieważ trzymanie danych w pliku tekstowym jest mało wygodne i utrudnia przetwarzanie zebranych danych do dalszych analiz, dlatego przygotowałem nową wersję skryptu korzystającego z bazy danych MySQL (ale równie dobrze może to być np. SQLite) - dzięki temu będzie łatwiej i prościej uzyskać jakieś dane statystyczne oraz przygotować stosowne wykresy.

Do celów późniejszego rozróżniania wejść pochodzących od robotów przeanalizowałem ciągi user agentów (identyfikatorów przeglądarek) i zrobiłem ich listę, którą wczytałem do tabeli robots. Przygotowałem też prosty konwerter danych zapisanych w pliku log.txt, który wrzuca te dane do tabeli stats i przy okazji oznacza każdy wpis czy wejście pochodziło od zwykłego użytkownika, czy od automatu (robota). Dzięki temu znacznikowi mogę sobie wygodnie wyfiltrować wejścia pochodzące tylko od użytkowników.
Dodatkowo by zwiększyć czytelność tabelki wejścia botów są zaznaczone specjalnym kolorem, a statystyki z kolejnego dnia rozgraniczam troszkę innym odcieniem tła.

Powrót do strony z wykazem projektów

Valid HTML 4.01 TransitionalValid CSS