Привет, Гость!
![]() |
![]() |
![]() |
Учебник PHP #13
{
GLOBAL $session_table:
$query = "DELETE FROM $session_table WHERE sess_expiration < ".time();
$result = mysql_query($query);
return mysql_affected_rows();
session_set_save_handler("mysql_sess_open", "mysql_sess_close","mysql_sess_read", "mysql_sess_write", "mysql_sess_destroy", "mysql_sess_gc");
?>
После того как эти шесть функций будут зарегистрированы в программе, их можно вызывать по абстрактным именам (sess_close( ), sess_destroy( ), sess_gc( ), sess_open( ), sess_read( ) или sess_write( )). Такой подход удобен тем, что вы можете создать сколько угодно реализаций и переключаться между ними, вызывая ses-sion_set_save_handler( ) по мере необходимости.
Проект: журнал посещений сайта
Статистические сведения о посетителях сайта приносят немалую пользу. Как вы уже знаете, сохранение информации о посетителях широко практикуется на сайтах рекламных 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 "<table cellpadding=\"2\" cellspacing=\"1\" width = \"700\" border = \"0\" bgcolor=\ " $table_color\ ">";
print "<tr bgcolor= \"$header_color\"><th>Browser</th><th>IP</th><th>Host</ th><th>TimeofVisit</th></tr>";
while($row = mysql_fetch_array($result));
list ($browse_type, $browse_version) = browser_info ($row["browser"]); $op_sys = opsys_info ($row["browser"]);
print "<tr bgcolor=\"$row_color\">";
print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">$browse_type $browse_version = $op_sys</font></td>";
print "<td><font color=\"$font_color\" face=\"$font_face\" si ze=\"$font_size\">".$row["ip"]."</f ont></td>";
print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">".$row["host"]."</font></td>";
print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">";
print $row["TimeofVisit"]."</font></td>";
print "</tr>";
endwhile;
print "</table>"; }
// 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:
?>
<html>
<head>
<title>Wecome to My Site!</title>
</head>
<body bgcolor="#c0c0c0" text="#000000" link="#808040" " vlink="#808040" alink="#808040">
Welcome to my site. <a href = "visitors.php">Check
GLOBAL $session_table:
$query = "DELETE FROM $session_table WHERE sess_expiration < ".time();
$result = mysql_query($query);
return mysql_affected_rows();
session_set_save_handler("mysql_sess_open", "mysql_sess_close","mysql_sess_read", "mysql_sess_write", "mysql_sess_destroy", "mysql_sess_gc");
?>
После того как эти шесть функций будут зарегистрированы в программе, их можно вызывать по абстрактным именам (sess_close( ), sess_destroy( ), sess_gc( ), sess_open( ), sess_read( ) или sess_write( )). Такой подход удобен тем, что вы можете создать сколько угодно реализаций и переключаться между ними, вызывая ses-sion_set_save_handler( ) по мере необходимости.
Проект: журнал посещений сайта
Статистические сведения о посетителях сайта приносят немалую пользу. Как вы уже знаете, сохранение информации о посетителях широко практикуется на сайтах рекламных 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 "<table cellpadding=\"2\" cellspacing=\"1\" width = \"700\" border = \"0\" bgcolor=\ " $table_color\ ">";
print "<tr bgcolor= \"$header_color\"><th>Browser</th><th>IP</th><th>Host</ th><th>TimeofVisit</th></tr>";
while($row = mysql_fetch_array($result));
list ($browse_type, $browse_version) = browser_info ($row["browser"]); $op_sys = opsys_info ($row["browser"]);
print "<tr bgcolor=\"$row_color\">";
print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">$browse_type $browse_version = $op_sys</font></td>";
print "<td><font color=\"$font_color\" face=\"$font_face\" si ze=\"$font_size\">".$row["ip"]."</f ont></td>";
print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">".$row["host"]."</font></td>";
print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">";
print $row["TimeofVisit"]."</font></td>";
print "</tr>";
endwhile;
print "</table>"; }
// 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:
?>
<html>
<head>
<title>Wecome to My Site!</title>
</head>
<body bgcolor="#c0c0c0" text="#000000" link="#808040" " vlink="#808040" alink="#808040">
Welcome to my site. <a href = "visitors.php">Check
Комментарии (0)
Скачать Java книгу»php/mysql/pdo/js
В библиотеку