Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Интернет технологии -> PHP -> Сбор статистики на PHP


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

Brutus aka Осипов Алексей

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

Статистические сведения о посетителях сайта приносят не мало пользы. По статистике можно подогнать дизайн сайта в соответствии с разрешением большинства посетителей, подогнать дизайн к браузеру, на котором приходят большая часть посетителей да и просто интересно, кто заглядывает к вам на сайт, из под какой 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."\r\n";
    //разделителем будут два ":"
    //далее пишу в файл
    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 и у меня все удобно помещается в одну строку. Этот скрипт можно скачать с моего сайта: http://coding.pp.ru . Если возникнут вопросы, то я с удовольствием на них отвечу: admin@coding.wp-club.net .

  •  

     
    Интересное в сети
     
    10 новых программ
    CodeLobster PHP Edition 3.7.2
    WinToFlash 0.7.0008
    Free Video to Flash Converter 4.7.24
    Total Commander v7.55
    aTunes 2.0.1
    Process Explorer v12.04
    Backup42 v3.0
    Predator 2.0.1
    FastStone Image Viewer 4.1
    Process Lasso 3.70.4
    FastStone Image Viewer 4.0
    Xion Audio Player 1.0.125
    Notepad GNU v.2.2.8.7.7
    K-Lite Codec Pack 5.3.0 Full


    Наши сервисы
    Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
    Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
    Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
    Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
     
    Это интересно
     

    Copyright © CompDoc.Ru
    При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.