В избранное    Домой    Карта сайта          Adminka

Суббота,  24 Jun 2017 г., 09:17
Господь -- свет мой и спасение мое: кого мне бояться? Господь -- крепость жизни моей: кого мне страшиться? Если будут наступать на меня злодеи, противники  и враги мои, чтобы пожрать плоть мою, то они сами преткнутся и падут. Если ополчиться против меня полк, не убоится сердце мое; если восстанет на меня война, и тогда буду надеяться. /Псалом 26 (ст.1-3)/

 Логин:  

 Пароль: 




Анонсы:
=== Дата: 14/08/2010     Автор: Brutus aka Осипов Алексей ===

Сбор статистики на PHP. Подглядываем за посетителями

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

Комментарии к статье (0)


<<назад

Погода в Рудне
(Волгоградcкая обл.)

Подробнее >>


Курс валют
на 24 Июн 2017 г.
DKK - 89,7035
USD - 59,6564

MainLink