Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Сборник статей
 
 

Сбор статистики на 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."\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

 
 » Обсудить эту статью на форуме

 
 Сборник статей 
 Содержание раздела 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS