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