2003 г

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

Brutus aka Осипов Алексей, http://coding.wp-club.net

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

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

  • Мы рекомендуем еще посмотреть:

      Эффективное распознавание
      Версия для вывода на принтер

        27 сентября 2007 года компания s-networks и российское представительство ЕМС проведут совместный обзорный семинар, посвященный применению программного обеспечения EMC Smarts для эффективного мониторинга отказов в сложных гетерогенных сетях предприятий и сервис-провайдеров.

        СеминарСеминар (лат.seminarium — буквально:"рассадник", "теплица") — форма учебно-практических занятий, при которой учащиеся (студенты, стажёры) обсуждают сообщения, доклады и рефераты, выполненные ими по результатам учебных или научных исследований под руководством преподавателя. Преподаватель в этом случае является координатором обсуждений темы семинара, подготовка к которому является обязательной. Поэтому тема семинара и основные источники обсуждения предъявляются до обсуждения для детального ознакомления, изучения. Цели обсуждений направлены на формирование навыков профессиональной полемики и закрепление обсуждаемого материала. Семинары — эффективная форма подготовки инженерных и научно-педагогических кадров в вузах., организованный в рамках программы "Работаем вместе!", адресован IT-менеджерам, системным инженерам, сетевым администраторам.

    Тематика семинара:

        Будут рассмотрены такие важные практические аспекты, как:

    • развертывание системы EMC Smarts,
    • эффективное распознавание сетевых устройств и топологий,
    • настройка взаимодействия с внешними системами сетевого управления и оповещения о событиях.
        Планируется демонстрация работы программного обеспечения с имитацией отказов в тестовой сети.

    Программа семинара:

    • Общий обзор продукта EMC SMARTS
      Алексей Свержановский, s-networks
    • Архитектура центрального модуля Service Assurance Manager (SAM)
      Борис Зинин, s-networks
    • Архитектура модуля IP Availability Manager (AM)
      Борис Зинин, s-networks
    • АрхитектураАрхитектура (лат.architectura от др.-греч. — старший, главный и — строитель, плотник) — искусство проектировать и строить здания и другие сооружения (также их комплексы), создающие материально организованную среду, необходимую людям для их жизни и деятельности, в соответствии с назначением, современными техническими возможностями и эстетическими воззрениями общества. Сами здания и сооружения также называют архитектурой. модуля IP Performance Manager (PM)
      Борис Зинин, s-networks
    • Архитектура модуля Business Impact Manager (BIM)
      Алексей Свержановский, s-networks
        Демонстрационный показ работы Системы SMARTS.
    09:30Регистрация
    10:00Начало семинараСеминара (итал.Seminara)— коммуна в Италии, располагается в регионе Калабрия, подчиняется административному центру Реджо-Калабрия.

    Условия участия:

        Участие в семинаре - бесплатное.

        Подать заявку на участие Вы можете, заполнив регистрационную форму.

    Место проведения:

        ООО "Центр исследований и разработок ЮКОС" (Схема и описание проезда)
        Россия, 119333, г. МоскваМосква — столица Российской Федерации, город федерального значения, административный центр Центрального федерального округа и Московской области, в состав которой не входит. Крупнейший по численности населения город России и Европы (население на 1 января 2010 года — 10562 тыс человек), центр Московской городской агломерации. Входит в десятку крупнейших городов мира.,
        Ленинский проспект, 55/1, стр. 2
        Тел. (095) 730 61 01
        Факс (095) 730 61 02
        

    Контакты:

        По организационным вопросам Вы можете обращаться в оргкомитет:
        по электронной почте:
        по телефонам:
            +7 (495) 163-25-25 доб. 543 Светлана Иванова
            +7 (495) 163-25-25 доб. 548 Светлана Иванова


    Документы по теме   / Cистемы хранения данных /  


    2009 IT и оборудование для бизнеса, S-NETWORKS. Информационные технологии и Информационное оборудование