Анонсы:
|
Сбор статистики на PHP. Подглядываем за посетителямиСтатистические сведения о посетителях сайта приносят не мало пользы. По статистике можно подогнать дизайн сайта в соответствии с разрешением большинства посетителей, подогнать дизайн к браузеру, на котором приходят большая часть посетителей да и просто интересно, кто заглядывает к вам на сайт, из под какой OC, а может это поисковый робот яндекса или гугла? Хотя некоторые системы слежения за посетителями бывают черезвычайно сложными, но с помощью довольно простой системы можно получить любопытные сведения о посетителях сайта. Я покажу как сделать с виду простой журнал посещений сайта с помощью PHP и cookies (MySQL не требуется). К тому же мой пример можно легко расширить. Для того, что бы система работала, нужно скрипт статистики встроить в каждую страницу. Ну или в те страницы, статистику посещений которых вы хотите увидеть. Наш скрипт будет записывать следующие данные:
Даже эти данные, я думаю, будут весьма интересны веб-мастерам. Итак, начнем. Скрипт будет называться 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." "; //разделителем будут два ":" //далее пишу в файл 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 и у меня все удобно помещается в одну строку. |
Погода в Рудне на 9 Дек 2024 г. 704 - Вьетнамских донгов - 1 |