Лабораторная работа 3. "Создание и чтение журнала посещения страниц". (уровень2, рабочая тетрадь, стр. 40)
<?
/*Создание и чтение журнала посещения страниц*/
define('PATH_LOG', 'path.log'); // Имя файла журнала. define() - Определяет именованную константу во время выполнения (константа и её значение) / Константа на тот случай, если я захочу поменять имя файла
include 'inc/log.inc.php';
/* / Создание и чтение журнала посещения страниц*/
include 'inc/headers.inc.php';
include 'inc/cookie.inc.php';
?>
<!DOCTYPE html>
<html>
<head>
<title><?= $title?></title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="inc/style.css" />
</head>
<body>
<div id="header">
<!-- Верхняя часть страницы -->
<img src="img/logo-php.png" width="187" height="29" alt="Наш логотип" class="logo" />
<span class="slogan">обо всём сразу</span>
<!-- Верхняя часть страницы -->
</div>
<div id="content">
<!-- Заголовок -->
<h1><?= $header?></h1>
<blockquote>
<?php //Куки. Приветствие пользователя и время последнего посещения (работа с куки в файле inc/cookie.inc.php):
if ($visitCounter == 1) { // если пользователь зашел первый раз
echo "Спасибо, что зашли на огонек<br>";
}else { // если пользователь зашел не первый раз
echo "<h1>Вы зашли к нам {$visitCounter}-й раз</h1><br> Последнее посещение: {$lastVisit}";
}
?>
</blockquote>
<!-- / Заголовок -->
<!-- Область основного контента -->
<?php
include 'inc/routing.inc.php';
?>
<!-- Область основного контента -->
</div>
<div id="nav">
<!-- Навигация -->
<h2>Навигация по сайту</h2>
<ul>
<li><a href='index.php'>Домой</a></li>
<li><a href='index.php?id=contact'>Контакты</a></li>
<li><a href='index.php?id=about'>О нас</a></li>
<li><a href='index.php?id=info'>Информация</a></li>
<li><a href='test/index.php'>Он-лайн тест</a></li>
<li><a href='index.php?id=gbook'>Гостевая книга</a></li>
<li><a href='eshop/catalog.php'>Магазин</a></li>
<li><a href="index.php?id=log">Журнал посещений</a></li> <!-- id=log - уже есть в routing.inc,php -->
<!-- обработчик в headers.inc.php -->
</ul>
<!-- Навигация -->
</div>
<div id="footer">
<!-- Нижняя часть страницы -->
© Супер-мега сайт, 2000 – <?= date('Y')?>
<!-- Нижняя часть страницы -->
</div>
</body>
</html>
<?
// Создание и чтение журнала посещения страниц (файл журнала посещений)
$dt = time(); // текущая временная метка (timestamp)
$ref = $_SERVER['HTTP_REFERER']; // присвоить переменной значение серверной переменной 'HTTP_REFERER' ( http://php-lessons/borisov_level-2/inc/log.inc.php)
// HTTP_REFERER - Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя (откуда пришел пользователь, т.е. с какой страници).
$page = $_SERVER['REQUEST_URI']; // присвоить переменной значение серверной переменной 'REQUEST_URI' (куда пришел пользователь), текущая страница
// REQUEST_URI - URI, который был передан для того, чтобы получить доступ к этой странице (приходит id страници, например, id=log)
$ref = pathinfo($ref, PATHINFO_BASENAME);
// pathinfo — Возвращает информацию о пути к файлу (вот тебе путь, вытащи из него кусок (без http://php-lessons/borisov_level-2/), чтоб строка была поменьше, нет смысла каждый раз писать http... ). Т.е. выведи мне имя файла и id (index.php?id=log)
$path = "$dt | $ref | $page\n"; // строковая переменная, содержащая значения переменных (для хранения логов в папке 'path.log')
// можно было бы сделать массив (сеарилизовать массив):
// $path = serialize(['dt'=>$dt, 'ref'=>$ref, 'page'=>$page]); // а в файле view.log.php вместо строки list()... распаковали бы массив: $arr = unserialize($line);
file_put_contents("log/".PATH_LOG, $path, FILE_APPEND); // PATH_LOG = path.log (пишем строку в файл 'path.log')
// FILE_APPEND - дозапишет в конец файла
// папку "log" создал самостоятельно
1500469323 | index.php?id=log | /borisov_level-2/index.php?id=log
1500469326 | index.php?id=log | /borisov_level-2/index.php
1500469327 | index.php | /borisov_level-2/index.php?id=log
<?
if (is_file('log/'.PATH_LOG)) { // существует ли файл журнала посещений 'path.log' (PATH_LOG = path.log)
$log = file('log/'.PATH_LOG); // получить все содержимое файла в виде массива строк (можно написать проверку, массив ли там? - if (is_array($log)) )
echo "<ol>";
foreach ($log as $line) {
list($dt, $ref, $page) = explode("|", $line); // содержимое файла 'path.log' разбыто разделителем "|" (разбить массив $line по переменным $dt, $page, $ref)
$dt = date('d:m:Y H:i:s', $dt); // $dt - timestamp
echo <<<OUT
<li>
  [$dt]: $ref --> $page
</li>
OUT;
}
echo "</ol>";
}
//   - пробел (спецсимвол html)