главная :: основы PHP
Заголовок
Проект: журнал посещений сайта
Статистические сведения о посетителях сайта приносят немалую пользу. Как вы уже знаете, сохранение информации о посетителях широко
практикуется на сайтах рекламных web-агентств и порталов, а также на многих других сайтах, желающих получить дополнительные сведения о
своих посетителях. Хотя системы учета бывают невероятно сложными, даже относительно простая система ведения учета открывает немало
интересных возможностей. Я покажу, как реализовать простейший журнал посещений на базе РНР, MySQL и cookie.
В проекте использована методика идентификации браузера, описанная в главе 8. Если вы пропустили главу 8 или описание проекта, я
настоятельно рекомендую вернуться и просмотреть код проекта.
Как было сказано ранее, наша система будет относительно простой — посещения будут отслеживаться только для индексной страницы сайта.
При появлении нового посетителя сценарий РНР проверяет, существует ли на компьютере посетителя cookie. Если cookie находится, значит,
пользователь посещал сайт в течение определенного интервала времени (который задается администратором сайта в инициализационном
файле), и сценарий не учитывает новое посещение. Если cookie отсутствует или интервал между посещениями превысил заданную величину,
информация сохраняется в таблице MySQL, а на компьютер посетителя создается cookie.
Как реализовать подобный сценарий на РНР? Прежде всего необходимо создать таблицу MySQL для хранения информации:
mysql>create table visitors (
->browser char(85) NOT NULL. ->ip char(30) NOT NULL.
->host char(85) NOT NULL.
->timeOfVisit datetime NOT NULL
->);
В поле browser хранится информация, непосредственно относящаяся к браузеру посетителя. Она берется из переменной РНР с именем
$HTTP_USER_AGENT. В поле ip хранится IP-адрес посетителя. В поле host хранится информация о провайдере, от которого поступил IP-адрес.
Наконец, поле timeOfVisit содержит дату и время посещения сайта.
Полноценное приложение для ведения журнала посещений имеется на сайте ресурсов РНР phpinfo.net (http://www.phpinfo.net). Более
того, вы сможете непосредственно
на сайте увидеть, как оно работает. К сожалению, перед посещением этого сайта вам
придется вспомнить школьный курс французского языка.
Затем мы создаем инициализационный файл приложения init.inc (листинг 13.9), содержащий определения глобальных переменных и основных
функций. Обратите внимание: в функции viewStats( ) используется сценарий sniffer.php из главы 8. Этот сценарий включается в файл init.inc по
мере необходимости. Рекомендую потратить немного времени на просмотр этого сценария и комментариев к нему.
Листинг 13.9. Инициализационный файл приложения (init.inc)
// Файл: init.inc
// Назначение: инициализационный файл журнала посещений сайта
// Параметры соединения с сервером MySQL $host = "localhost";
$user = "root"; $pswd = "";
// Имя базы данных Sdatabase = "myTracker";
// Имя таблицы $visitors_table = "visitors":
@mysql_pconnect($host, $user, $pswd) or die("Couldn't connect to MySQL server!");
// Выбрать базу данных
@mysql_select_db($database) or die("Couldn't select $database database!");
// Максимальное количество посещений, отображаемое в таблице $maxNumVisitors = "5";
// Имя cookie
$cookieName = "visitorlog";
// Значение cookie $cookieValue="1";
// Срок, который должен пройти с момента последнего посещения сайта,
// чтобы информация о текущем посещении была сохранена в базе данных.
// Если переменная $timeLimit равна 0. сохраняются все посещения
// независимо от их частоты.
// Остальные целочисленные значения интерпретируются как интервал
// времени в секундах.
$timeLimit = 3600:
// Формат отображения данных в браузере
$header_color = "#cbda74";
$table_color = "#000080";
$row_color = "IcOcOcO";
$font_color = "#000000":
$font_face = "Arial. Times New Roman. Verdana";
$font_size = "-1";
function recordUser() {
GLOBAL $visitors_table, $HTTP_USER_AGENT, $REMOTE_AODR, $REMOTE_HOST; if ($REMOTE_HOST — "") :
$REMOTE_HOST - "localhost"; endif;
$timestamp - date("Y-m-d H:i:S");
$query - "INSERT INTO $visitors_table VALUES('$HTTP_USER_AGENT', '$REMOTE_ADDR', '$REMOTE_HOST',
'$timestamp')";
Sresult = @mysql_query($query); }
// recordUser function viewStats() {
GLOBAL $visitors_table, $maxNumVisitors, $table_color, $header_color;
GLOBAL $row color. $font color, $font face, $font size:
$query = "SELECT browser, ip. host. TimeofVisit FROM $visitors_table ORDER BY TimeofVisit desc
LIMIT 0, $maxNumVisitors";
$result = mysql_query($query);
print " ";
print "Browser | IP | Host
th> | TimeofVisit | ";
while($row = mysql_fetch_array($result));
list ($browse_type, $browse_version) = browser_info ($row["browser"]); $op_sys = opsys_info
($row["browser"]);
print "";
print "$browse_type
$browse_version = $op_sys | ";
print "".$row["ip"]." | ";
print "".$row["host"]." | ";
print "";
print $row["TimeofVisit"]." | ";
print " ";
endwhile;
print " "; }
// viewStats
?>
Фрагмент кода, приведенный в листинге 13.10, проверяет существование cookie и при необходимости вызывает функцию recordUser( ). Я
привожу этот фрагмент в составе очень простого индексного файла index.php.
Листинг 13.10. Проверка существования cookie (index.php)
include("Listing13-9.php"); if (! isset($$cookieName)) :
// Создать cookie
setcookie($cookieName, $cookieValue, time()+$timeLimit);
// Сохранить информацию о посетителе recordUser();
endif:
?>
Wecome to My Site!
Welcome to my site. Check out who else has recently visited.
Как организовать просмотр информации, хранящейся в базе данных MySQL, в браузере? Задача решается простым вызовом функции viewStats(
) в отдельном файле visitors.php:
include("sniffer.inc"):
include("init.inc");
?>
Most recent =$maxNumVisitors:?> visitors
viewStats( );
?>
Возможно и другое решение — включить весь код HTML в функцию viewStats( ), а затем просто включить sniffer.inc, init.inc и вызов viewStats( ) в
отдельный файл. Выбор зависит от того, до какой степени вы хотите интегрировать форматирование таблицы с процессом выборки данных.
На рис. 13.1 показан пример выходных данных viewStats( ) для атрибутов форматирования, заданных в файле init.inc.
Рис. 13.1. Пример результата, сгенерированного функцией viewStats( )
Существует немало путей для расширения практических возможностей этого приложения. Например, для отслеживания посещений со
страницами сайта часто связываются идентификаторы, по которым в дальнейшем можно следить за перемещением пользователей между
страницами. В рассмотренном проекте для этого в таблицу MySQL следует включить дополнительное поле, в котором хранится
идентификатор страницы, а затем переопределить функцию recordllser( ) с дополнительным параметром. Идентификатор страницы сохраняется
в cookie. При поступлении очередного запроса сценарий проверяет существование cookie для конкретной страницы, информация о которой
регистрируется в журнале.
|