Главная | Учебник | Статьи | 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_ADDR | IP адрес пользователя |
$HTTP_REFERER | Ссылка, по которой пришел пользователь (если таковая была, т.е. пользователь не набрал адрес сайта в браузере или выбрал из списка избранных сайтов) |
Теперь рассмотрим логику работы самой системы.
Проверяем, не является ли значение поля $HTTP_REFERER новым (не содержится в таблице referers). Если новое, то добавляем его в нужную таблицу и устанавливаем количество хитов для него в 1. Если такая ссылка уже была, то, просто, увеличиваем количество хитов.
Аналогичным образом проверяем адрес запрашиваемой страницы.
Далее проверяем, были ли хиты сегодня. Если хитов небыло, значит, начался новый день и это первое посещение сегодня. Следовательно, удаляем все данные из таблицы hits, так как хранить всю информацию в ней нерентабельно. Затем вносим новую дату в таблицу hitsbydate и устанавливаем количество хитов и хостов для данной даты в 1. Если же новый день еще не наступил, то, проверив, не является ли IP адрес уникальным на сегодня, увеличиваем поля hits и hosts в таблице hitsbydate.
И, наконец, заносим информацию в таблицу hits.
Вот и все. Вся необходимая информация хранится в базах на сервере и доступна в любой момент для проведения дальнейшего статистического анализа.
Результаты работы такой системы вы можете посмотреть на странице статистики моего сервера.