Рецепты программирования на PHP

  Главная   Учебник   Статьи   FAQ   Книги   Ссылки  

Создание системы учета посещений

© Андрей Головин

http://exper.ural.ru/

У вас может возникнуть вопрос, зачем это нужно? Свои услуги предлагают более десятка российских и огромное множество иностранных систем статистики. Так зачем лишний раз напрягаться, писать и отлаживать скрипты, создавать базы и, вообще, совершать какие-либо телодвижения, когда, потратив 10 минут, мы получим полноценную систему статистики, которая предлагает нам, просто, безграничное количество данных о пользователях нашего сайта?

Причин две. Во-первых, "внешняя" система статистики создают ощутимую задержку в загрузке страницы. Во-вторых, одному интересно узнать больше о графической системе пользователя, другому - о версиях браузера, а третьему - время проведенное пользователем на его сайте. Но, как оказывается, одна система дает инормацию о графической системе, вторая - о времени посещений, третья - вообще, не дает такой инормации, зато наиболее точно считает количество посетителей. Что делать? Вот и начинаем мы с вами ставить на страницу один, два, а потом и все пять счетчиков, после чего, время загрузки полезной информации составит не более 10% от времени загрузки сайта. Это приведет к тому, что посетитель плюнет и уйдет (интернет-то большой) или информации о нем не попадет в системы статистики. Вот тут-то мы и приходим к осознанию того, что система нужна своя.

Какие преимущества это дает? Во-первых, скорость загрузки. Цифры статистики можно вывести текстом, что не задержит загрузку, а обработка статистики будет производится на том же сервере, что и страница, что не внесет дополнительных задержек на установление связи с удаленным сервером. Во-вторых, такая система, изначально, будет соответствовать нашим запросам. Хотим - будем учитывать параметры графической системы пользователей, хотим - будем считать, сколько раз пришел за последние 15 секунд Вася Пупкин. В-третьих, так как такая система является неотъемлемой частью сайта, то не будет потеряно ни одного хита!

Здесь я не буду приводит конкретных скриптов, потому, что это будет очень громоздко, да и не нужно, вы, ведь, пришли разобраться во всем этом? Я изложу только основные принципы.

Для реализации подобной системы я использовал слудующее программное обеспечение:

Базы данных: mySQL
Скрипт: PHP
Вебсервер: Apache.

Сначала определимся, какие параметры мы хотим учитывать. Для себя я считаю важным знать, сколько пользователей пришло на сайт, сколько хитов они принесли, какие страницы посетили и откуда пришли и время каждого хита.

Из этих данных можно вывести довольно много статистической информации. Так что этот аскетичный набор меня вполне устраивает. Исходя из этого, я создал три таблицы в базе данных:

hits: Хранит подробную информацию о хитах за текущий день. Содержит следующие поля:

Имя Комментарий
host буквенное имя домена пользователя
addr IP адрес пользователя
referer ссылка, по которой пришел пользователь
page на какую страницу сайта пришел пользователь
timest время хита.

hitsbypage: хранит инормацию за весь период по посещениям страниц сайта. Содержит следующие поля:

Имя Комментарий
page страница
hits количество хитов
hosts количество хостов

referers: хранит информацию о ссылках, по которым приходят на сайт. Содержит следующие поля:

Имя Комментарий
href собственно, ссылка
hits количество посещений с этой ссылки

hitsbydate: хранит информацию о хитах и хостах по дням. Содержит следующие поля:

Имя Комментарий
date дата
hits количество хитов
hosts количество хостов

Возникает вопрос, откуда взять все эти данные? Вебсервер, при установлении сеанса устанавливает определенные переменные среды, которые доступны из скриптов на языке PHP. Прежде всего нас интересуют следующие:

Переменная Значение
$REQUEST_URI адрес запрашиваемой страницы
$REMOTE_HOST домен пользователя (если установлен)
$REMOTE_ADDRIP адрес пользователя
$HTTP_REFERER Ссылка, по которой пришел пользователь (если таковая была, т.е. пользователь не набрал адрес сайта в браузере или выбрал из списка избранных сайтов)

Теперь рассмотрим логику работы самой системы.

Проверяем, не является ли значение поля $HTTP_REFERER новым (не содержится в таблице referers). Если новое, то добавляем его в нужную таблицу и устанавливаем количество хитов для него в 1. Если такая ссылка уже была, то, просто, увеличиваем количество хитов.

Аналогичным образом проверяем адрес запрашиваемой страницы.

Далее проверяем, были ли хиты сегодня. Если хитов небыло, значит, начался новый день и это первое посещение сегодня. Следовательно, удаляем все данные из таблицы hits, так как хранить всю информацию в ней нерентабельно. Затем вносим новую дату в таблицу hitsbydate и устанавливаем количество хитов и хостов для данной даты в 1. Если же новый день еще не наступил, то, проверив, не является ли IP адрес уникальным на сегодня, увеличиваем поля hits и hosts в таблице hitsbydate.

И, наконец, заносим информацию в таблицу hits.

Вот и все. Вся необходимая информация хранится в базах на сервере и доступна в любой момент для проведения дальнейшего статистического анализа.

Результаты работы такой системы вы можете посмотреть на странице статистики моего сервера.

Hosted by uCoz