WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




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


Прислал: NAS [ 01.10.2000 @ 14:44 ]
Раздел:: [ Статьи по PHP ]


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

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

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

Результаты работы такой системы вы можете посмотреть на странице статистики моего сервера. © Андрей Головин //exper.ural.ru/


 :::::  Anonymous пишет 29.11.2000 @ 18:31 
Если написан просто счетчик посещений HTML страницы и его значение хранится в единственном файле. То как обеспечить корректность работы при множественных одновременных обращениях к HTML странице? Ведь файл для счетчика не может быть открыт одновременно на запись-чтение.
 :::::  =KRoN= пишет 19.03.2001 @ 15:47 
Для устранения ошибок с одновременным доступом используется функция flock() в PHP.

$fp = fopen($counterFile,"rw");
flock($fp,2);
//Работа с файлом
flock($fp,3);
fclose($fp);

Последний flock() можно опускать, т.к. fclose() автоматически разблокирует файл.

Пока flock() в состоянии 2, то другой скрипт останавливается и ждёт, пока первый освободит файл.
 :::::  DeNix пишет 20.04.2001 @ 08:13 
Если посетитель использует proxy, то REMOTE_ADDR это адрес прокси, в этом случае используется HTTP_X_FORWARDED_FOR
То есть если HTTP_X_FORWARDED_FOR присутствует - взять IP оттуда, иначе взять из REMOTE_ADDR
Можно еще добавить HTTP_USER_AGENT

 :::::  Алексей пишет 11.08.2001 @ 19:36 
а что такое время хита и как его считать?
 :::::  Алексей пишет 11.08.2001 @ 19:43 
кстати, кто-нибудь в NS эту страницу видел?
 :::::  Foshvad пишет 19.08.2001 @ 13:22 
Уважаемый NAS!
Если бы Вы привели здесь "конкретные скрипты", это было бы скорее наглядно, чем "очень громоздко".
 :::::  Tornado пишет 03.09.2001 @ 19:13 
Да тут моного полезных вещей можно найти.
 :::::  Алексанр Шуркаев пишет 19.09.2001 @ 06:31 
К сожалению, просто использование flock() не всегда спасает на Unix машине... Можно попробывать следующее:
$cnt = 0;
$maxattempts = 5;
do{
if (flock($handle, 2)) break;
if ($cnt>=$maxattempts){
print "Сервер загнулся %-("; // можно убрать. тогда счетчик просто не посчитает посетителя (это лучше, чем обнуление статистики...)
break;
}
sleep(1);
$cnt++;
}while(0);
 :::::  buster пишет 03.12.2001 @ 13:09 
А как быть, если скрипт вызывается вообще из другого домена? Тогда HTTP_REFERER — это адрес страницы, с которой был вызван скрипт, а откуда взять информацию о том, откуда пришёл посетитель на эту страницу?
 :::::  odissey пишет 09.12.2001 @ 23:29 
Я несколько дополнил эту статью, теперь система показывает по каким страницам сайта ходил юзер и сколько времени на них провел.
Все здесь www.odissey.h1.ru
 :::::  Design & Programming from ADC пишет 01.10.2003 @ 20:00 
Хвалю. Вот это хорошая статья...
 :::::  Антон пишет 05.10.2009 @ 13:44 
уважаемый автор, я сомневаюсь что сервисы статистики дают мало информации о посетитителях, один только счетчик mail.ru, который находится внизу этого сайта дает все что ты перечислил выше.
Имя:
Email:
URL

Введите сумму двух чисел девять и одинн (девять+одинн=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0248170