Цель работы: формирование умений использования SSI.

Литература

Поясняющая информация

Server Side Include

SSI расшифровывается как Server Side Include. SSI - это набор команд, включенных в страницу HTML, команды выполняются на сервере перед отсылкой запрошенной страницы клиенту.

При получении запроса на документ, содержащий SSI-директивы, HTTP-сервер обрабатывает документ, выполняет все SSI-директивы, а получившийся в результате документ возвращает клиенту. HTTP-сервер не проверяет автоматически все документы на наличие SSI-директив, а только те, которые относятся к типу, указанному в настройках сервера ( в нашем случае все файлы с расширением .shtml).

SSI-директивы включаются в html-код в виде комментариев определенного формата:

<!--#SSI_директива="параметры" -->


echo var

Используется для вывода значения переменной окружения.
<!--#echo var="Переменная"-->
например:
<!--#echo var="REMOTE_ADDR"-->

Некоторые переменные:
REMOTE_ADDR - ваш IP адрес
REMOTE_PORT - номер вашего порта
HTTP_USER_AGENT - ваш браузер
SERVER_NAME - имя сервера
SERVER_PORT - номер порта сервера
SERVER_SOFTWARE - какой HTTP сервер установлен
SERVER_PROTOCOL - протокол который поддерживает сервер
SERVER_ADMIN - администратор сервера
HTTP_REFERER - с какой страницы вы пришли
DOCUMENT_URI - URI документа
DOCUMENT_NAME - название файла текущего документа
QUERY_STRING - строка запроса методом GET
LAST_MODIFIED - время последней модификации файла


include file
include virtual

Включает содержимое указанного файла в html-файл в месте, где идет вызов данной команды. Отличие include file от include virtual :
include file - путь к файлу, относительно текущей директории. (То есть не может быть абсолютным путем к файлу (начинаться с / или содержать ../).
include virtual - виртуальный путь к документу на сервере. Он может начинатся с /, но должен быть на том же сервере.
Пример:
<!--#include file="docext.html"-->
<!--#include virtual="/counters/spylog.txt"-->
<!--#include virtual="/cgi-bin/counter.pl" -->

Если с помощью include file или include virtual включается cgi-скрипт, то в содержимое страницы попадет вывод cgi-скрипта, а не его содержание.

С помощью этих директив вы можете сделать автоматическую сборку страниц. Если ваша страница состоит из блоков, и некоторые блоки одинаковые на всех страницах, то эти блоки можно вынести в отдельные файлы, а на страницах вставить эти директивы. Благодаря этому вы сможете внести изменения в одном файле, и информация на всех страницах изменится.


fsize file

Вставляет размер указанного файла.
Например:
<!--#fsize file="karta.shtml"-->

flastmod file

Вставляет время последней модификации указанного файла.
Например:
<!--#flastmod file="karta.shtml"-->


printenv
Выводит все переменные окружения. Параметров не имеет. Вы можете вывести весь список переменных, которые вам доступны.
Список переменных окружения:
<!--#printenv -->


set var

Устанавливает значение переменной окружения. Формат такой set var="ИМЯ_ПЕРЕМЕННОЙ" value="ЗНАЧЕНИЕ".
Значение переменной TITLE:
<!--#set var="TITLE" value="Лабораторная работа 2" -->
Значение переменной SERVER_NAME:
<!--#echo var="TITLE" -->
Последняя директива выведет "Лабораторная работа 2".

Если у вас "шапочка" (<head></head>) вынесена в отдельный файл, и в нем задан основной <title> сайта, то с помощью этой директивы вы сможете дополнить <title>.
Пример:
В отельном файле содержащим <head></head> (например, top.shtml), пишем:
<title>Сервер Васи Пупкина: <!--#echo var="TITLE" --> </title>


В файле, куда предыдущий файл вставляется (до директивы вставки), пишем:
<!--#set var="TITLE" value="Лабораторная работа 2" -->


В результате получаем:
<title>Сервер Васи Пупкина: Лабораторная работа 2 </title>


if/else

Применяется для управления выводом страницы по условию. Синтаксис такой:

<!--#if expr="УСЛОВИЕ1" -->
HTML-код, который будет выводиться, если УСЛОВИЕ1 истинно
<!--#elif expr="УСЛОВИЕ2" -->
HTML-код, который будет выводиться, если УСЛОВИЕ1 ложно, а УСЛОВИЕ2 истинно
<!--#else -->
HTML-код, который будет выводиться, если все условия ложны
<!--#endif -->

Условие - это либо строка, которая является истинной, если непустая, или набор операторов сравнения строк. Операторы могут быть =,!=,<,<=,> и >. Если вторая строка заключена в "/"(слэши), то условие истинно, если в первой строке встречается хоть одно вхождение второй строки. Можно объединять несколько операторов сравнения с помощью операторов &&(И) и ||(ИЛИ). Для группирования условий используются "()"(скобки).

Пример:
string1 = string2
string1 != string2
string1 < string2
string1 <= string2
string1 > string2
string1 >= string2

Если string2 имеет форму /string/, то тогда она интерпретируется, как регулярное выражение.

Пример:

<!--#if expr="$HTTP_COOKIE=/user\=old/" -->

Данным примером проверяем, содержится ли в cookies user=old.


goto

Команда goto оператор перехода на маетку label.


Формат команды: <!--#goto ="<label>"-->

где <label> имя метки, определенное командой label.

Пример.
<!--#goto ="testlabel" -->
Эта строка не будет видна
<!--#label ="testlabel" -->
Эта строка будет видна

Замечание: Между символами <!--#goto и знаком = обязательно должен стоять пробел.


label

Команда label устанавливает метку в документе, которая используется командами goto или if..goto


Формат команды: <!--#label ="<label>"-->

где <label> строка из не более чем 51 символа без пробелов, идентиифицирующая место в документе. Задание метки не влияет на форматирование документа.

Замечание: Между символами <!--#label и знаком = обязательно должен стоять пробел.


break

Команда break останавливает вывод документа, как только встречается.

Пример:


Эта строка будет видна
<!--#break -->
Эта строка не будет видна





Практические задания

Задание 1

  1. Создайте каталог /ssi/, для хранения включаемых файлов.

  2. Создайте в нем пустые файлы (например: top.shtml, botom.shtml, left.htm, right.htm).

  3. Переделайте первую страницу, вынеся верхнею часть (включая верхнею таблицу и "шапку" (<head> </head>)) и нижнею (включая нижнею таблицу), а также левую и правую часть соответственно в файлы, которые вы создали. Незабудьте изменить расширение на .shtml.

  4. Проверьте работоспособность на сервере.

  5. Сделайте, чтобы <title> формировался динамически.

  6. На первой странице, выведите следующею информацию:
    размер файла
    дата последней модификации файла
    ваш IP адрес
    номер вашего порта
    ваш браузер
    имя сервера
    номер порта сервера
    какой HTTP сервер установлен
    протокол, который поддерживает сервер
    с какой страницы вы пришли
    URI документа
    название файла текущего документа

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

Задание 2

  1. Создайте новую страницу. Выведите все переменные окружения.

  2. Проверьте работоспособность на сервере.

Задание 3

  1. Приведите все остальные страницы к общему виду с помощью SSI, т.е. верхняя и нижняя часть должны быть одинаковы для всех страниц (кроме фреймовых страниц).

  2. Пропишите на каждой странице дополнение к <title>, соответствующее данному документу.

  3. Проверьте работоспособность на сервере.

К сдаче лабораторной предоставляются: работающие страницы на сервере.

Последнее изменение: среда, 13 июля 2011, 16:23