Сбор статистики на PHP

Автор: Topol Воскресенье, Апрель 15th, 2012 Нет комментариев

Рубрика: Программирование

Подглядываем за посетителями :)

Статистические сведения о посетителях сайта приносят не мало пользы. По статистике можно подогнать дизайн сайта в соответствии с разрешением большинства посетителей, подогнать дизайн к браузеру, на котором приходят большая часть посетителей да и просто интересно, кто заглядывает к вам на сайт, из под какой OC, а может это поисковый робот яндекса или гугла? Хотя некоторые системы слежения за посетителями бывают черезвычайно сложными, но с помощью довольно простой системы можно получить любопытные сведения о посетителях сайта. Я покажу как сделать с виду простой журнал посещений сайта с помощью PHP и cookies (MySQL не требуется). К тому же мой пример можно легко расширить.

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

Браузер + OC (HTTP_USER_AGENT)
IP адрес (REMOTE_ADDR)
Хост (REMOTE_HOST)
Страницу-рефферер (HTTP_REFERER)
Время визита (date(«d.m.Y H:i:s»))
Запрашиваемый адрес (REQUEST_URI)
Даже эти данные, я думаю, будут весьма интересны веб-мастерам. Итак, начнем. Скрипт будет называться sniffer.php. Я приведу текст всего скрипта и дополню это обильными комментариями:

<?php
//sniffer.php
//защита от непосредственного запуска
//скрипта кем то посторонним
if (eregi(«sniffer.php»,$PHP_SELF)) {
Header(«Location: index.php»);
die();
}
extract($HTTP_GET_VARS);
extract($HTTP_POST_VARS);
extract($HTTP_COOKIE_VARS);
extract($HTTP_SERVER_VARS);

//этот фрагмент кода был позаимствован
//из системы PHP Nuke ;)
//далее объявляю переменные
$fileName=»stat.txt»; //имя файла со статистикой
$maxVisitors=30; //количество записей, отображаемых
//при просмотре статистики
$cookieName=»visitorOfMySite»; //имя куки
$cookieValue=»1″; //значение куки
$timeLimit=86400; //срок в секундах, который должен
//пройти с момента последнего посещения сайта, что бы
//информация о посетителе записалась повторно. Это
//значение равно 1 дню, т.е. один и тот же посетитель
//записывается в статистику раз в одни сутки. Если
//эту переменную приравнять к нулю, то будут учитываться
//все посещения одного и того же посетителя
//далее следуют переменные, отвечающие за отображение
//статистики
$headerColor=»#808080″;
$headerFontColor=»#FFFFFF»;
$fontFace=»Arial, Times New Roman, Verdana»;
$fontSize=»1″;
$tableColor=»#000000″;
$rowColor=»#CECECE»;
$fontColor=»#0000A0″;
$textFontColor=»#000000″;
//все переменные подготовлены.
//Функция записи данных о посетителе
function saveUserData() {
GLOBAL $fileName, $HTTP_USER_AGENT, $REMOTE_ADDR, $REMOTE_HOST,
$HTTP_REFERER, $REQUES_URI;
$curTime=date(«d.m.Y @ H:i:s»); //текущее время и дата
//подготавливаю данные для записи
if (empty($HTTP_USER_AGENT)) {$HTTP_USER_AGENT = «Unkwnown»;}
if (empty($REMOTE_ADDR)) {$REMOTE_ADDR = «Not Resolved»;}
if (empty($REMOTE_HOST)) {$REMOTE_HOST = «Unknown»;}
if (empty($HTTP_REFERER)) {$HTTP_REFERER = «No Referer»;}
if (empty($REQUEST_URI)) {$REQUEST_URI = «Unknown»;}
$data_ = $HTTP_USER_AGENT.»::».$REMOTE_ADDR.»::».$REMOTE_HOST.»::
«.$HTTP_REFERER.»::».$REQUEST_URI.»::».$curTime.»rn»;
//разделителем будут два «:»
//далее пишу в файл
if (is_writeable($fileName) ) :
$fp = fopen($fileName, «a»);
fputs ($fp, $data_);
fclose ($fp);
endif;
}
//функция записи готова. Теперь нужно написать
//функцию вывода данных из файла статистики
function showStat () {
GLOBAL $headerColor, $headerFontColor, $fontFace, $fontSize, $tableColor,
$fileName, $maxVisitors, $rowColor, $fontColor, $textFontColor;
//вывожу таблицу
$fbase=file($fileName);
$fbase = array_reverse($fbase);
$count = sizeOf($fbase);
echo «<font face=»$fontFace» color=»$textFontColor» size=»$fontSize»>»;
echo «Всего посещений: $count<br><br>»;
echo «<div align=»center»>
<table cellpadding=»2″ cellspacing=»1″ width=»95%»
border=»0″ bgcolor=»$tableColor»>»;
echo «<tr bgcolor=»$headerColor»><td><
font face=»$fontFace» color=»$headerFontColor»
size=»$fontSize»>Браузер
</font>
</td><td><font face=»$fontFace» color=»$headerFontColor»
size=»$fontSize»>IP</font></td>
<td><font face=»$fontFace» color=»$headerFontColor»
size=»$fontSize»>Хост</font></td>
<td><font face=»$fontFace» color=»$headerFontColor»
size=»$fontSize»>Ссылка</font></td>
<td><font face=»$fontFace» color=»$headerFontColor»
size=»$fontSize»>Страница</font></td>
<td><font face=»$fontFace» color=»$headerFontColor»
size=»$fontSize»>Время визита</font></td></tr>»;
echo «</font><font face=»$fontFace» size=»$fontSize»>»;
//открываю файл и запускаю цикл
$fbase=file($fileName);
$fbase = array_reverse($fbase);
for ($i=0; $i<$maxVisitors; $i++) :
if ($i>= sizeof($fbase)) {break;}
$s = $fbase[$i];
//разделяю
$strr = explode(«::», $s);
if (empty($strr)) {break;}
//вывожу данные
echo «<tr><td bgcolor=»$rowColor»><
font face=»$fontFace» color=»$fontColor»
size=»$fontSize»>$strr[0]</font>
</td><td bgcolor=»$rowColor»><
font face=»$fontFace» color=»$fontColor»
size=»$fontSize»>$strr[1]</font>
</td><td bgcolor=»$rowColor»><
font face=»$fontFace» color=»$fontColor»
size=»$fontSize»>$strr[2]</font>
</td><td bgcolor=»$rowColor»><
font face=»$fontFace» color=»$fontColor»
size=»$fontSize»>$strr[3]</font>
</td><td bgcolor=»$rowColor»><
font face=»$fontFace» color=»$fontColor»
size=»$fontSize»>$strr[4]</font>
</td><td bgcolor=»$rowColor»><
font face=»$fontFace» color=»$fontColor»
size=»$fontSize»>$strr[5]</font></td>
</tr>»;
endfor;
}

?>

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

<?php
include(«sniffer.php»);
if (! isset($$cookieName)) :
//установить куки
setcookie($cookieName, $cookieValue, time()+$timeLimit);
saveUserData();
endif;
?>

Здрасьте! А мона вас посчитать? Можно? Ну спасибо! Я вас посчитал! ;)

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

<html><body>
<?php include(«sniffer.php»); ?>
Статистика<br>
<?php
showStat();
?></body></html></i>

Здесь мы просто включили файл sniffer.php и вызвали из него функцию showStat() Вот с помощью такого небольшого скрипта, длинной всего ровно в 100 строк, можно с помощью PHP получить и в удобном виде просмотреть. Здесь ещё много чего предстоит сделать, например сделать статистику по реферерам, браузерам… Так же можно из HTTP_USER_AGENT вытащить браузер и ОС и записать их в более удобном виде. Кстати, все размеры при выводе статистики я расчитывал при разрешении 1024*768 и у меня все удобно помещается в одну строку.

Источник: webcorp.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты