Директивы SSI


Содержание

Базовые директивы директивы SSI

включаются в html документ в виде комментариев (это не мешает вам использовать обычные комментарии).

Очень часто значение помещается в двойные кавычки. Некоторые команды позволяют иметь только одну пару атрибут-значение. Обратите внимание, что заключительная часть комментария () должна отделяться от директивы пробелом, иначе она будет воспринята, как ее часть.

Рассмотрим определенные в apache элементы ssi:

config — контролирует различные аспекты сканирования. Его атрибутами могут быть:

errmsg — устанавливает сообщение, выводящееся при возникновении ошибки; в большинстве случаев целесообразно установить в пустую строку;

sizefmt — устанавливает формат, в котором будет выводиться размер файла. Формат соответствует передаваемому библиотечной функции strftime;

timefmt — устанавливает формат, в котором будет выводиться дата.

echo — выводит значение установленной переменной ssi. Допустимым атрибутом является var.

fsize — выводит размер файла в определенном с помощью sizefmt формате. Допустимые атрибуты:

file — определяет путь к файлу, относительно сканируемого документа;

virtual — определяет стандартный кодированный url, относительно сканируемого документа, или, при наличии в начале слеша (/) — относительно корня документов узла.

flastmod — выводит дату последней модификации файла в определенном с помощью timefmt формате. Атрибуты аналогичны атрибутам fsize.

include — включает текст другого документа или файла в сканируемый файл. К включаемому файлу применяются все установленные правила ограничения доступа. Если для каталога, из которого включается файл, установлена опция includesnoexec, и включение данного документа привело бы к запуску программы, то документ не включается, и выводится сообщение об ошибке. cgi сценарии вызываются, как обычно с помощью url, который может содержать кодированную строку запроса (query string). Положение файла указывается с помощью атрибутов:

file — указывает путь, относительно сканируемого документа; путь не может содержать ../ и не может быть абсолютным путем; всегда предпочтительнее использовать атрибут virtual;
virtual — содержит кодированный url, относительный или абсолютный; url не может содержать имя протокола или имя хоста, и может содержать строку запроса.

printenv — выводит содержимое переменных окружения. Вызывается без параметров.

set — устанавливает значение переменной. Ее атрибутами являются var, определяющий имя переменной, и value, определяющий ее значение.

Директивы SSI

Server Side Include с английского переводится как «включаемый на стороне сервера».Эта технология позволяет Web-серверу включать в текст ваших HTML-страниц любой другой текст: содержимое текстовых файлов или, например, результат работы CGI-скриптов (который, как известно, обычно оформляется в виде HTML-текста). Происходит это «включение» непосредственно перед передачей текста HTML-страницы броузеру пользователя, так что посетитель страницы даже не догадывается об этой серверной «возне».

Какова же польза от SSI? Польза огромна. Предположим, на каждой странице своего сайта вы поместили список доступных разделов сайта. Творение ваше, как и положено, постоянно развивается, и вот вы решили добавить еще один раздел. Что же теперь, открывать все страницы в редакторе и тупо добавлять в текст одно и то же? Советский пионер (любящий трудности) поступил бы именно так, а умный Web-дизайнер станет использовать SSI. Для этого достаточно создать отдельный текстовый файл (например, menu.html) и занести туда HTML-код списка разделов. Непосредственно же в страницы сайта, в том месте, где должен находиться список разделов, нужно вставить следующую инструкцию:

Обратите внимание на то, что нужно дословно следовать синтаксису директив SSI. Забудете, например, поставить два тире в конце директивы — и сервер ей буквально «подавится», прекратив анализ страницы.

Когда кто-либо захочет просмотреть эту страницу, сервер заменит инструкцию содержимым файла menu.html. Если вы измените файл menu.html, то все страницы, где вы использовали , обновятся автоматически. Обратите внимание: в HTML-файлах, лежащих на диске Web-сервера, ничего не меняется — сервер производит вставку текста «на лету», перед тем, как отправить WWW-страницу в броузер посетителя.

Вместо имени обычного текстового файла в инструкции можно указывать имя CGI-скрипта. В этом случае сервер сначала выполнит CGI-скрипт, а потом вставит результат работы скрипта в текст WWW-страницы. Это означает, что вы сможете реализовать такие вещи как, например, текстовый счетчик посещений или отображение на странице случайно выбранной фразы.

Есть еще одно косвенное преимущество применения SSI: из-за использования шаблонов типа вышеупомянутого menu.html WWW-страницы будут меньшими по объему, и вы сможете сэкономить немало времени, переписывая файлы на Web-сервер по FTP.

Но не все так прекрасно. Например, вам не удастся поэкспериментировать с механизмом SSI на машине, на которой не установлен Web-сервер. Функционирование SSI обеспечивается именно сервером, поэтому при просмотре HTML-файлов с локального жесткого диска (например, С:), ваш броузер проигнорирует директивы SSI — ведь они, с точки зрения HTML, являются обычными комментариями.

В общем, SSI — действительно полезный инструмент, игнорировать который, если вам дорого свое время (и деньги), не стоит.

Включение механизма Server-S >Любой документ, у которого будет установлен обработчик «server-parsed» будет сканироваться этим модулем, если включена опция «Includes». Если вы имеете малое количество документов с SSI, то лучше всего в файле httpd.conf указать следующее:

AddType text/html .shtml AddHandler server-parsed .shtml

и устанавливать у таких файлов расширение .shtml. Если же все или почти все документы будут иметь директивы SSI, то лучше в файле конфигурации указать:

AddHandler server-parsed .html

И не забудьте включить в опции директории узла опцию Includes:

Конечно в этой строке могут быть и другие нужные вам опции.

Базовые директивы

Директивы SSI включаются в HTML документ в виде комментариев (это не мешает вам использовать обычные комментарии). Синтакс команд имеет следующий вид:

Очень часто значение помещается в двойные кавычки. Некоторые команды позволяют иметь только одну пару атрибут-значение. Обратите внимание, что заключительная часть комментария () должна отделяться от директивы пробелом, иначе она будет воспринята, как ее часть.

Рассмотрим определенные в Apache элементы SSI:

config — контролирует различные аспекты сканирования. Его атрибутами могут быть:

errmsg — устанавливает сообщение, выводящееся при возникновении ошибки; в большинстве случаев целесообразно установить в пустую строку;

sizefmt — устанавливает формат, в котором будет выводиться размер файла. Формат соответствует передаваемому библиотечной функции strftime;

timefmt — устанавливает формат, в котором будет выводиться дата.

echo — выводит значение установленной переменной SSI. Допустимым атрибутом является var.

fsize — выводит размер файла в определенном с помощью sizefmt формате. Допустимые атрибуты:

file — определяет путь к файлу, относительно сканируемого документа;


virtual — определяет стандартный кодированный URL, относительно сканируемого документа, или, при наличии в начале слеша (/) — относительно корня документов узла.

flastmod — выводит дату последней модификации файла в определенном с помощью timefmt формате. Атрибуты аналогичны атрибутам fsize.

include — включает текст другого документа или файла в сканируемый файл. К включаемому файлу применяются все установленные правила ограничения доступа. Если для каталога, из которого включается файл, установлена опция IncludesNOEXEC, и включение данного документа привело бы к запуску программы, то документ не включается, и выводится сообщение об ошибке. CGI сценарии вызываются, как обычно с помощью URL, который может содержать кодированную строку запроса (query string). Положение файла указывается с помощью атрибутов:

file — указывает путь, относительно сканируемого документа; путь не может содержать ../ и не может быть абсолютным путем; всегда предпочтительнее использовать атрибут virtual;
virtual — содержит кодированный URL, относительный или абсолютный; URL не может содержать имя протокола или имя хоста, и может содержать строку запроса.

printenv — выводит содержимое переменных окружения. Вызывается без параметров.

set — устанавливает значение переменной. Ее атрибутами являются var, определяющий имя переменной, и value, определяющий ее значение.

Переменные включения

В дополнение к стандартным окружения CGI, модуль SSI делает доступными для директив и условий, а также для вызываемых через SSI сценариев следующие переменные:

DATE_GMT — текущее время по Гринвичу;
DATE_LOCAL — текущее локальное (для сервера) время;
DOCUMENT_NAME — имя файла (без каталогов) документа, запрошенного пользователем;
DOCUMENT_URI — декодированный URL запрошенного пользователем документа;
LAST_MODIFIED — дата последней модификации документа, запрошенного пользователем. То есть во вложенном SSI эта переменная будет содержать имя «главного» документа, а не вложенного.

Подстановка переменных

Подстановка переменных производится внутри заключенных в кавычки строк в большинстве аргументов SSI директив. В этих случаях знак доллара можно вставить, предварив его слешом:

Для предотвращения двусмысленности можно заключать имя переменной в фигурные скобки:

В результате такого присвоения переменная Zed будет иметь значение «Xbc_Y», если переменная a равна X, а переменная abc равна Y.

Условные операторы

Базовыми элементами контроля являются:

Элементы elif и else являются необязательными.

Элемент endif заканчивает элемент if и является обязательным.

test_condition может быть одним из следующих:

string — истинно, если string не пуста;
string1 = string2
string1 != string2
string1 string2
string1 >= string2

— истинно, если выполняется условие сравнения. Если string2 имеет форму /string/, то тогда она интерпретируется, как регулярное выражение. Их синтаксис аналогичен синтаксису регулярных выражений в Unix команде egrep;
( test_condition ) — истинно, если test_condition истинно;
! test_condition — истинно, если test_condition ложно;
test_condition1 && test_condition2 — истинно, если как test_condition1, так и test_condition2 истинны;
test_condition1 || test_condition2 — истинно, если хотя бы test_condition1 или test_condition2 истинно.
«=» и «!=» имеют больший приоритет, чем «&&» и «||», а «!» имеет наивысший приоритет.

Все, что не распознается, как переменная, считается строкой. Если строка имеет пробелы или символы табуляции, то ее надо заключать в кавычки.

Практическое использование SSI

Первым распространенным применением SSI является внедрение в документ некоего динамического куска разметки. Хрестоматийными примерами могут служить счетчики посещений, цитаты или баннеры рекламных сетей. В любом случае, будь то строка текста или целая таблица, вставка производится с помощью директивы include, помещаемой в то место, куда должен быть вставлен кусок разметки:

Библиотека Интернет Индустрии I2R.ru

Малобюджетные сайты.

Продвижение веб-сайта.

Контент и авторское право.

Bведение в SSI

У всех, кто когда-либо начинал более или менее серьёзно заниматься созданием вебстраниц, обязательно возникала мысль — а как неплохо бы было, если бы повторяющиеся фрагменты HTML-кода можно было бы писать только по одному разу — чтобы затем они вставлялись бы в нужные места страниц автоматически. Самые продвинутые пытались воспользоваться Java-скриптами, чтобы добиться этого — но тогда страницы начинали растекаться жиром на десятки килобайт, а браузеры посетителей захлёбывались в сложном и обьёмном коде скриптов.

Между тем решение проблемы давно уже было — правда клиентам бесплатных хостингов оно не было доступно. На Webservis.ru оно есть и зовут его «SSI» — «Server Side Includes».

Перевести это можно, в принципе, как «сборкой страниц занимается вебсервер».

Назначение технологии SSI — указать вебсерверу, какой фрагмент взять, и куда его приткнуть, прежде чем выдать его посетителю страницы. Так, ни на одной моей странице нет кода, который отвечает за показывание баннера — а вы его видите, и не один, а даже два. Просто на каждой из моих страниц вверху и внизу есть фрагмент . Когда ваш браузер попросил у вебсервера Webservis.ru страницу, на которой вы сейчас находитесь, сервер обнаружил эту метку в тексте страницы. В ней содержится указание взять из подкаталога Fragments файл banner.html и вставить его вместо этой метки. Поэтому если мне вдруг когда нибудь захочется поменять баннер, мне будет достаточно изменить один только файл banner.html — а менять все страницы не понадобится совершенно.

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

Но давайте по порядку. Итак, как вы могли увидеть, SSI-команды вставляются в текст страниц, как обычные комментарии, внутри тэга . Единственное отличие от простого комментария — в начале должен обязательно присутствовать символ «#».

Вот список основных SSI-команд:

#include file

Вставляет файл из той же самой папки. Так, укажет серверу взять файл file.txt и вставить его содержимое в страницу

#include virtual

В отличие от предыдущей команды эта позволяет вставлять файлы из других папок. Так, укажет серверу взять файл file.txt из подпапки nibud папки kakoj. Как видите, здесь используются относительные пути к файлам.

#fsize file

Выводит размер файла (формат числа указывается командой config sizefmt). Так выведет значение размера cтраницы, на которой вы сейчас находитесь — 26,576 байт.

#flastmod file

Выводит дату последнего обновления файла (формат числа указывается с помощью директивы config datefmt).


#exec cmd

Запускает указанную программу и вставляет выведенные ей строки в текст страницы. Например,

#exec cgi

Запускает указанный скрипт и вставляет результат его работы в страницу. Но лучше пользуйтесь для этого директивой include virtual (exec cgi может иногда не работать). Так, скрипт, который каждый раз выводит новый пример запроса для поиска в правом верхнем углу этой страницы, вызывается у меня командой . Перезагрузите эту страницу, и эта фраза — «установка Perl» , вставляемая скриптом random-example.cgi через SSI-команду include virtual сменится другой.

#config errmsg

Вы, наверное, нередко встречали фразу «[an error occurred while processing this directive]» на некоторых недоделанных или неправильно работающих сайтах. Эту фразу вебсервер выводит тогда, когда он не может запустить скрипт, если в том содержатся ашипки или очепятки или же этого скрипта просто не существует. Команда config errmsg позволяет заменить эту непонятную фразу на что-нибудь более вменяемое. Советую вставлять первой строкой во все страницы, которые вы создаёте, SSI-команду

#config timefmt

Указывает серверу, в каком формате выдавать дату командой flastmod. По умолчанию это что-то вроде » Sunday, 10-Sep-2000 17:58:59 Московское время (лето) «. Вам же может захотеться получить дату в виде день/месяц/год. Для этого с командой config timefmt используется нужное сочетание следующих возможных параметров:

Формат Описание Пример
%a Краткое название дня недели Mon
%A Полное название дня недели Monday
%b Аббревиатура названия месяца Dec
%B Полное название месяца December
%d День месяца 01 (не 1)
%D Дата в формате «%m/%d/%y» 12/31/99
%e День месяца 13
%H Часы в 24-часовом формате 13
%I Часы в 12-часовом формате 01
%j День года 235
%m Номер месяца 01
%M Минуты 03
%p AM/PM (до полудня/после) AM
%r Время в формате «I:M:S p» 11:35:46 PM
%S Секунды 34
%s Время в секундах с 01.01.1970 957228726
%T Время в формате «%H:%M:%S» 14:05:34
%U Неделя года 16
%w Номер дня недели 4
%y Год в формате ГГ 99
%Y Год в формате ГГГГ 1999
%Z Временная зона MSK
Илон Маск рекомендует:  Asp задачи администрирования, использующие объекты iis admin

Таким образом, команда укажет серверу выдавать время последнего обновления файла в таком формате — 21/11/2000, 00:42:33, а команда — в таком — 21/11/00.

#config sizefmt

Изменяет формат вывода значения размера файла. заставляет выводить размер файла в килобайтах ( 26k), а — в байтах (26,576)

Обратите внимание на то, что команды #config sizefmt и #config timefmt влияют на все связанные с ними SSI-команды от того места, откуда они были вызваны и до самого конца страницы. Поэтому каждый вызов команд #flastmod и #fsize снабжайте своей командой #config — так проще и спокойнее.

#printenv

Выводит список так называемых «переменных окружения» («environment variables») с их значениями. В их числе переменные:

DOCUMENT_ROOT (название основной папки для вебстраниц на сервере, обычно ваша папка public_html и путь к ней),
HTTP_USER_AGENT (название браузера, которым пользуется посетитель),
REMOTE_ADDR (IP-адрес посетителя),
REMOTE_HOST (адрес посетителя в нормальной форме — например, d150.p7.col.ru)
SERVER_ADDR (IP-адрес вашего сайта)
SERVER_NAME и HTTP_HOST (адрес сервера, типа userguide.webservis.ru),
DOCUMENT_URI, REQUEST_URI и SCRIPT_NAME (запрошенная вами страница, типа /examples/mysqlexample.shtml. Сочетание SERVER_NAME и REQUEST_URI даёт привычный вам адрес страницы),
DOCUMENT_NAME (только название файла),
SCRIPT_FILENAME (полный путь к вебстранице на сервере. Например /home/home-webservis/public_html/ и так далее),
SERVER_SOFTWARE (название сервера, например, Apache/1.3.12 (Unix))
SERVER_ADMIN (почтовый адрес владельца сервера, указанный при установке. Когда вы регистрируетесь, имя созданного для вас на Webservis.ru ящика прописывается там),
DATE_LOCAL (сегодняшниее время и дата в вашем часовом поясе),
DATE_GMT (то же, но по Гринвичу),
LAST_MODIFIED (дата и время последнего обновления страницы)

Никаких параметров у этой SSI-команды нет. Просто .

То, что выводит эта команда, когда её обрабатывает сервер Webservis.ru, работающий на Unix и вебсервер, который, быть может, вам захочется установить для тестирования сайта на ваш домашний компьютер под Windows, отличается на добрых две трети. Учитывайте это!

#echo var

Выводит знчение определённой переменной. Например, http:// выведет адрес этой страницы — http://userguide.webservis.ru/creating-ssi.shtml.

#set var value

Присваивает новое значение переменной. Например,

#if, #elif, #else и #endif

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

HTML-код, который будет выводиться, если ВТОРОЕ-УСЛОВИЕ истинно

HTML-код, который будет выводиться, если ПЕРВОЕ-УСЛОВИЕ ложно, а ВТОРОЕ-УСЛОВИЕ истинно

HTML-код, который будет выводиться, если все условия ложны

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

Для группирования условий используются скобки. Пример:

Вы пользуетесь браузером

Microsoft Internet Explorer

неизвестной мне марки

Такой фагмент выведет:

Вы пользуетесь браузером Microsoft Internet Explorer

Ну что, насколько меньше этот фрагмент скрипта на Java, который делает то же самое? А главное это то, что всеми этими условиями занимается сервер, а посетителю страницы выдаётся готовый результат — и он, в отличие от случая с JavaScript, когда он может посмотреть код скрипта, даже не знает, что что-то делалось со страницей.

Поэкспериментируйте с SSI — и через некоторое время вы увидите, как он облегчает жизнь. Размеры страниц поуменьшатся за счёт того, что вы избавитесь от повторения общих для всех страниц фрагментов, да и затраты времени на изменения в страницах будут поменьше.

Единственное, о чём стоит помнить, так это о том, что лучше не использовать SSI-команды при создании страниц в редакторах типа Front Page — они их обычно не понимают и выкидывают, и о том, что одну SSI-команду нельзя вызвать из другой (как нельзя вызвать SSI-команду из скрипта, и (скажу, забегая вперёд) скрипт из скрипта).

Главный сайт сервера Apache 2.x.x

Директивы SSI

  • var — имя переменной.
  • value — значение, присваиваемое переменной.

Вы уже пользуетесь технологией SSI (Server-Side Includes, включения на стороне сервера) «

Вывод переменной ‘ $description ‘ производится с использованием директивы — ‘ echo ‘,

которая выводит зачение переменной — ‘ $description ‘.

Вы уже пользуетесь технологией SSI (Server-Side Includes, включения на стороне сервера)


Пример использования технологии SSI (Server-Side Includes — включения на стороне сервера)
A B
1 Ваш браузер Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1
2 Ваш IP 188.64.174.135
3 Имя страницы (none)
4 Обновлена [Кажется, что Вы не знаете, как использовать SSI]
5 Ее размер [Кажется, что Вы не знаете, как использовать SSI]
6 Переход с http://avege.ru/russian/httpserver/ssi/index.shtml
Вывод переменных окружения
Переменные (Variable) Значение (Value) Описание
Ваш браузер — Microsoft Internet Explorer Определение браузера для учета специфики отображения страницы
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1 Подробно
188.64.174.135 IP посетителя
19:34:08 Текущая дата по местному часовому поясу
11.11.2020 Текущая дата по Гринвичу
(none) Имя этого файла — документа.
/russian/httpserver/ssi/index.shtml (% — декодированный) — путь, URL документа
(none) Дата последней модификации документа
(none) Имя владельца файла
[Кажется, что Вы не знаете, как использовать SSI] Дата последнего обновления
В случае ошибки выполнения директив SSI. будет выведено сообщение — [an error occurred while processing this directive].
Разработчики Apache советуют заменить его на — [Кажется, что Вы не знаете, как использовать SSI].
Размешайте эту директиву как можно выше на странице.
/var/www/html Корневой каталог документов сайта на сервере
(none) почтовый-ящик администратора.
(none) Apache/2.2.4 (Win32) Server at www.httpserver.ru Port 80
/russian/httpserver/ssi/index.shtml /avegemain/createsite/ssi/index.shtml
(none)
(none)
(none) Apache/1.3.34 (Unix) Програмное обеспечение сервера имя/версия (операционная система). ..
(none) Строка, полученная от клиента
avege.ru Имя сервера, в большинстве случаев доменное — avege.ru, иногда, из-за отсутствия имени — IP-адрес.
(none) Имя / версия протокола CGI Common Gateway Interface served WWW (HTTP).
HTTP/1.1 Имя и версия HTTP сервера (name/version).
443 TCP-Порт сервера используюшийся для соединения (по умолчаниию 80).
GET Тип метода запроса к серверу.
(none) Виртуальный путь, указанный в запросе (путь от базовой диретории WWW сервера).
(none) Полный путь, указанный в запросе.
(none) Имя скрипта в запросе. ..
(none) Имя компьютера удаленного клиента
(none) Список языков доступных для копьютера клиента
(none) Имя (подобное имени Е-mail address) удаленного клиента.
http://avege.ru/russian/httpserver/ssi/index.shtml ULR адрес HTML документа из которого сделан запрос клиентом.
Список MIME типов, */* — все типы.
(none) Имя удаленного клиета, используемое для идентификации пользователя, согласно спецификации RFC931.
(none) Имя пользователя для авторизованного метода доступа.
(none) Переменная для определения авторизованного метода доступа к серверу
(none) Содержение ответа клиента на запрос от сервера

Сайт, в общем случае, — это набор страниц (файлов) связанных между собой локальными и глобальными ссылками. Пока выведем за скобки глобальные ссылки (гиперссылки) — ссылки со счетчиков на серверы статистики, почтовые серверы, тематические каталоги, поисковые системы и т. д. — для проверки работоспособности которых без выхода в Интернет не обойтись.
Страницы (файлы) непосредственно размещенные на сайте, связаны между собой локальными (внутри сайта) ссылками, позволяющими осуществлять переход от одной из них к другой, загружать файлы рисунков, содержимое других страниц, вызовы скриптов и многое другое. Если сайт состоит из одной страницы, то его можно не задумываясь размещать на сервере вашего провайдера, так как вы, при загрузке её из Интернета, моментально увидите возможные ошибки. Но если сайт состоит из десятка страниц, то для проверки правильности вывода текстовой и графической информации, вывода данных из CGI-скриптов, SSI-директив, переходов на другие страницы сайта и пр., вам потребуются, при тестировании страниц сайта в Интернете, значительные временные и финансовые затраты.

Директивы SSI

Дурным стилем сайтостроительства считается наличие в документе гиперссылок на этот же документ. Ссылаться на самого себя неразумно — пользователь от нажатия на гиперссылку ожидает, что загрузится другая страница, а также такого рода ссылки доставляют большие неудобства пользователям каналов с низкой пропускной способностью. Такие ссылки на себя часто получаются при включении колонтитулов. Для того чтобы избежать таких ссылок, оформляйте каждый пункт меню в колонтитулах следующим образом: Данный SSI-код используется на сайте http://my-elecon.ru.

Другой не менее важный SSI-код применяется для организации версии страниц для печати. Версия страницы сайта для печати отличается от обычной страницы отсутствием колонститулов, навигации, баннеров и прочей лишней информации. Рассмотрим, как организована версия для печати на примере сайта http://alavus.ru.

При нажатии на гиперссылку «версия для печати» страница, на которой находится пользователь, перегружается. Но поскольку в строке запроса присутствует параметр for_printing, то лишний HTML-код не включается на страницу. Обратите внимание . Это строка запроса CGI-параметров. В обычном случае, у вас никаких параметров, кроме for_printing нет, но когда появляются на сайте CGI-модули, то появляются и дополнительные параметры. Забегая вперед расскажу, как делать «Версию для печати» В CGI-программе. Пока веб-сервер Apache не может обрабатывать на SSI-директивы вывод CGI-программ. Такую возможность обещают в новых версиях Apache. У CGI-программистов есть два пути либо самим разобрать SSI-директивы в файле head.inc либо, что значительно проще, создать ручками файл phead.inc и подключать его в CGI-программах.

Условные операторы записываются следующим образом: Для примера приведу SSI-код для вывода времени последней модификации документа в приемлемом виде. Как вы уже видели, команда выдает совершенно не приемлемую строчку — Monday, 26-Feb-2001 19:25:58 Московское время (зима), для размещения ее на солидном веб-сайте. Нам бы хотелось получить что-нибудь, вроде 26 Февраля 2001 года. Для этого существует команда config с параметром timefmt, которая задает формат вывода даты. Например, в нашем случае нам требуется следующий вариант , тогда результат будет 26 February 2001. Но это пока все равно не то, что бы нам хотелось. Для определения месяца мы воспользуемся условными операторами. Вот, как будет выглядеть этот код: Соответственно, чтобы получить дату в формате 26 Февраля 2001.
Вот полный список значение параметра timefmt:

Формат Описание Пример
%a Аббревиатура названия дня недели Sun
%A Полное название дня недели Sunday
%b Аббревиатура названия месяца Jan
%B Полное название месяца January
%d День месяца 01 (не 1)
%D Дата в формате «%m/%d/%y» 01/31/90
%e День месяца 1
%H Часы в 24-часовом формате 13
%I Часы в 12-часовом формате 01
%j День года 235
%m Номер месяца 01
%M Минуты 03
%p AM|PM AM
%r Время в формате «%I:%M:%S %p» 11:35:46 PM
%S Секунды 34
%s Время в секундах с 01.01.1970 957228726
%T Время в формате «%H:%M:%S» 14:05:34
%U Неделя года 49
%w Номер дня недели 5
%y Год в формате ГГ 95
%Y Год в формате ГГГГ 1995
%Z Временная зона MSK

Далее приведены несколько полезных SSI-директив. Допустим, вы распространяете какие-либо утилиты и выкладываете ссылки на файлы для скачивания. Например, такие ссылки вы найдете на сайте http://www.oxygensoftware.com. Для удобства пользователей неплохо было бы указать размер файла и иногда, дату его последней модификации. Каждый раз после выкладывания на сервер новых версий файла, модифицировать самому ручками все размеры и даты долго и мучительно. Server Side Includes приходят на помощь.

Прозрачный gif-файл
Дата модификации:
Размер: байта
Если у вас файлы больших размеров, то информацию лучше выводить в килобайтах. Для этого установите формат вывода размера файла следующим образом.
При возникновение какой-либо ошибки, например, при попытки включить в HTML-документ файл, которого не существует веб-сервер выдаст следующее сообщение:

Сообщение не слишком информативно и пугает пользователя, не так ли? Давайте изменим сообщение об ошибке следующей SSI-директивой
Теперь сообщение об ошибке вылядит так:

Ограничение SSI по расположению

Диапазон действия директивы может быть ограничен парой директив , или директив , или размещением его в файле .htaccess, находящемся в этом каталоге.

Первый вариант ограничения режима SSI

по расширению файла: директива AddHandler

Еще одним способом ограничения количества файлов, просматриваемых сервером Apache до того, как они будут обслужены, является указание нового расширения фай лов, содержащих ключевые слова SSI. Например, чтобы ограничить SSI вывод в вашей системе только файлами с расширением .shtml, можно прибегнуть к помощи директивы AddHandier.

AddHandier server parsed .shtml

Эта директива сообщает серверу, что перед передачей страниц пользователям нужно просматривать файлы с расширением . shtml и делать соответствующие замены директив SSI. Конечно использовать именно расширение . shtml не обязательно, но такой метод является наиболее традиционным.

Уместно напомнить, что директиву AddHandier можно применять только к SSI файлам. Это общий метод подключения типов файлов к дескрипторам внутреннего содержимого на сервере Apache. Эта директива опять встретится нам при обсуждении CGI интерфейса.

Второй вариант ограничения режима SSI

по расширению файла: директива AddType

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

AddType text/html .shtml

С другой стороны, директиву AddType можно использовать для полного обхода директивы AddHandier. Например:

AddType application/x server parsed .shtml

2.6. Определение элементарных SSI: директива XBitCrack

Единственной директивой модуля mod_include является директива XBitCrack. Если ее установить в on, это будет означать, что сервер рассматривает все документы, исполняемые в файловой системе и имеющие MIME тип text/html как SSI документы.

Помимо значений off и on, директива XBitCrack имеет опцию fall, задающую серверу режим вставки заголовка Last Modified при передаче файла. Это позволяет proxy—серверу производить кэширование.

Листинг вставок

В этом разделе перечислены SSI вставки и приведены примеры их использования.

3.1. Установка опций SSI: команда config

Команда config модифицирует формат вывода для других команд. Вставка команды config позволяет определить следующие три момента:

• errmsg является текстовым сообщением, передаваемым клиенту в случае возникновения ошибки в процессе синтаксического анализа SSI.

•sizefmt [bytes | abbrev] задает формат отображения размера.

•timefmt задает формат строки, используемый при отображении календарных

3.2. Отображение конфигурационных переменных: команда echo

Команда echo предназначена для отображения значения переменной окружения.

3.3. Запуск сценария: команда exec

Эта команда используется для запуска программы из страницы SSI. Такая программа может быть исполняемым кодом. В этом случае используется параметр cmd:

С другой стороны, это может быть сценарий CGI. В таком случае используется параметр cgi:

Отметим, что разрешение запуска сценариев CGI несет в себе определенный риск для системы безопасности, и на это не стоит идти без крайней необходимости.

3.4. Отображение размера файла: команда fsize

Для отображения размера файла в соответствии с форматом, заданным командой config sizefmt, предназначена команда fsize.

3.5.Отображение времени последней модификации файла: команда flastmod


Для отображения времени последней модификации файла в формате, заданного командой config timefmt, необходимо указать:

3.6. Условное выполнение: команды if и elif

SSI код имеет простейшее (элементарное) управление выполнением. Для выполнения некоего оператора по определенному условию возьмите его в операторные скобки if. Возможно также выполнение оператора elif .

V a r 1 is true

3.7. Отображение других файлов: команда include

Для отображения в качестве вывода текущего документа содержимого других фай лов (при этом указывается абсолютный путь) используется директива include:

или задается имя узла:

3.8.Отображениеспискавсехпеременныхокружения: команда printenv

Эта команда предназначена для отображения сразу всех переменных окружения (это очень удобно при отладке).

3.9. Изменение значения переменной: команда set

Команда set предназначена для создания переменных и присвоения им значений.

Интерфейс CGI

CGI является общим интерфейсом отображения результатов работы программ. Формат CGI не зависит от языка программирования. С этим интерфейсом может работать любая программа или сценарий из существующего на данный момент инструментария программирования, начиная с достаточно «древнего» языка программирования COBOL и до языка написания сценариев Perl, генерирующего код HTML. Одна ко на практике одни языки лучше подходят для генерирования CGI содержимого, чем другие. В частности, язык Perl более подходит для обработки текстовых строк, содержащих HTML код.

| следующая лекция ==>
Включение режима SSI | Настройка сервера Apache

Дата добавления: 2020-06-02 ; просмотров: 320 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Настройка и вызов SSI директив

Как включить SSI, что именно надо написать в .htaccess?

Для включения SSI необходимо внести в файл .htaccess строки:

Как вызвать SSI директиву?

По умолчанию, SSI-директивы могут использоваться только в файлах с расширением .shtml
Пример вызова директивы:

Как настроить веб-сервер так, чтобы SSI директивы обрабатывались в файлах с расширениями .htm и .html?

Для того, чтобы SSI дерективы обрабатывались в файлах с расширениями .htm и .html необходимо добавить в файл .htaccess сайта строки:

Базовые директивы директивы SSI

включаются в html документ в виде комментариев (это не мешает вам использовать обычные комментарии).

Очень часто значение помещается в двойные кавычки. Некоторые команды позволяют иметь только одну пару атрибут-значение. Обратите внимание, что заключительная часть комментария () должна отделяться от директивы пробелом, иначе она будет воспринята, как ее часть.

Рассмотрим определенные в apache элементы ssi:

config — контролирует различные аспекты сканирования. Его атрибутами могут быть:

errmsg — устанавливает сообщение, выводящееся при возникновении ошибки; в большинстве случаев целесообразно установить в пустую строку;

sizefmt — устанавливает формат, в котором будет выводиться размер файла. Формат соответствует передаваемому библиотечной функции strftime;

timefmt — устанавливает формат, в котором будет выводиться дата.

echo — выводит значение установленной переменной ssi. Допустимым атрибутом является var.

fsize — выводит размер файла в определенном с помощью sizefmt формате. Допустимые атрибуты:

file — определяет путь к файлу, относительно сканируемого документа;

virtual — определяет стандартный кодированный url, относительно сканируемого документа, или, при наличии в начале слеша (/) — относительно корня документов узла.

flastmod — выводит дату последней модификации файла в определенном с помощью timefmt формате. Атрибуты аналогичны атрибутам fsize.

include — включает текст другого документа или файла в сканируемый файл. К включаемому файлу применяются все установленные правила ограничения доступа. Если для каталога, из которого включается файл, установлена опция includesnoexec, и включение данного документа привело бы к запуску программы, то документ не включается, и выводится сообщение об ошибке. cgi сценарии вызываются, как обычно с помощью url, который может содержать кодированную строку запроса (query string). Положение файла указывается с помощью атрибутов:

file — указывает путь, относительно сканируемого документа; путь не может содержать ../ и не может быть абсолютным путем; всегда предпочтительнее использовать атрибут virtual;
virtual — содержит кодированный url, относительный или абсолютный; url не может содержать имя протокола или имя хоста, и может содержать строку запроса.

printenv — выводит содержимое переменных окружения. Вызывается без параметров.

set — устанавливает значение переменной. Ее атрибутами являются var, определяющий имя переменной, и value, определяющий ее значение.

Библиотека Интернет Индустрии I2R.ru

Малобюджетные сайты.

Продвижение веб-сайта.


Контент и авторское право.

Bведение в SSI

У всех, кто когда-либо начинал более или менее серьёзно заниматься созданием вебстраниц, обязательно возникала мысль — а как неплохо бы было, если бы повторяющиеся фрагменты HTML-кода можно было бы писать только по одному разу — чтобы затем они вставлялись бы в нужные места страниц автоматически. Самые продвинутые пытались воспользоваться Java-скриптами, чтобы добиться этого — но тогда страницы начинали растекаться жиром на десятки килобайт, а браузеры посетителей захлёбывались в сложном и обьёмном коде скриптов.

Между тем решение проблемы давно уже было — правда клиентам бесплатных хостингов оно не было доступно. На Webservis.ru оно есть и зовут его «SSI» — «Server Side Includes».

Перевести это можно, в принципе, как «сборкой страниц занимается вебсервер».

Назначение технологии SSI — указать вебсерверу, какой фрагмент взять, и куда его приткнуть, прежде чем выдать его посетителю страницы. Так, ни на одной моей странице нет кода, который отвечает за показывание баннера — а вы его видите, и не один, а даже два. Просто на каждой из моих страниц вверху и внизу есть фрагмент . Когда ваш браузер попросил у вебсервера Webservis.ru страницу, на которой вы сейчас находитесь, сервер обнаружил эту метку в тексте страницы. В ней содержится указание взять из подкаталога Fragments файл banner.html и вставить его вместо этой метки. Поэтому если мне вдруг когда нибудь захочется поменять баннер, мне будет достаточно изменить один только файл banner.html — а менять все страницы не понадобится совершенно.

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

Но давайте по порядку. Итак, как вы могли увидеть, SSI-команды вставляются в текст страниц, как обычные комментарии, внутри тэга . Единственное отличие от простого комментария — в начале должен обязательно присутствовать символ «#».

Вот список основных SSI-команд:

#include file

Вставляет файл из той же самой папки. Так, укажет серверу взять файл file.txt и вставить его содержимое в страницу

#include virtual

В отличие от предыдущей команды эта позволяет вставлять файлы из других папок. Так, укажет серверу взять файл file.txt из подпапки nibud папки kakoj. Как видите, здесь используются относительные пути к файлам.

#fsize file

Выводит размер файла (формат числа указывается командой config sizefmt). Так выведет значение размера cтраницы, на которой вы сейчас находитесь — 26,576 байт.

#flastmod file

Выводит дату последнего обновления файла (формат числа указывается с помощью директивы config datefmt).

#exec cmd

Запускает указанную программу и вставляет выведенные ей строки в текст страницы. Например,

#exec cgi

Запускает указанный скрипт и вставляет результат его работы в страницу. Но лучше пользуйтесь для этого директивой include virtual (exec cgi может иногда не работать). Так, скрипт, который каждый раз выводит новый пример запроса для поиска в правом верхнем углу этой страницы, вызывается у меня командой . Перезагрузите эту страницу, и эта фраза — «установка Perl» , вставляемая скриптом random-example.cgi через SSI-команду include virtual сменится другой.

#config errmsg

Вы, наверное, нередко встречали фразу «[an error occurred while processing this directive]» на некоторых недоделанных или неправильно работающих сайтах. Эту фразу вебсервер выводит тогда, когда он не может запустить скрипт, если в том содержатся ашипки или очепятки или же этого скрипта просто не существует. Команда config errmsg позволяет заменить эту непонятную фразу на что-нибудь более вменяемое. Советую вставлять первой строкой во все страницы, которые вы создаёте, SSI-команду

#config timefmt

Указывает серверу, в каком формате выдавать дату командой flastmod. По умолчанию это что-то вроде » Sunday, 10-Sep-2000 17:58:59 Московское время (лето) «. Вам же может захотеться получить дату в виде день/месяц/год. Для этого с командой config timefmt используется нужное сочетание следующих возможных параметров:

Формат Описание Пример
%a Краткое название дня недели Mon
%A Полное название дня недели Monday
%b Аббревиатура названия месяца Dec
%B Полное название месяца December
%d День месяца 01 (не 1)
%D Дата в формате «%m/%d/%y» 12/31/99
%e День месяца 13
%H Часы в 24-часовом формате 13
%I Часы в 12-часовом формате 01
%j День года 235
%m Номер месяца 01
%M Минуты 03
%p AM/PM (до полудня/после) AM
%r Время в формате «I:M:S p» 11:35:46 PM
%S Секунды 34
%s Время в секундах с 01.01.1970 957228726
%T Время в формате «%H:%M:%S» 14:05:34
%U Неделя года 16
%w Номер дня недели 4
%y Год в формате ГГ 99
%Y Год в формате ГГГГ 1999
%Z Временная зона MSK

Таким образом, команда укажет серверу выдавать время последнего обновления файла в таком формате — 21/11/2000, 00:42:33, а команда — в таком — 21/11/00.

#config sizefmt

Изменяет формат вывода значения размера файла. заставляет выводить размер файла в килобайтах ( 26k), а — в байтах (26,576)

Обратите внимание на то, что команды #config sizefmt и #config timefmt влияют на все связанные с ними SSI-команды от того места, откуда они были вызваны и до самого конца страницы. Поэтому каждый вызов команд #flastmod и #fsize снабжайте своей командой #config — так проще и спокойнее.

#printenv

Выводит список так называемых «переменных окружения» («environment variables») с их значениями. В их числе переменные:

DOCUMENT_ROOT (название основной папки для вебстраниц на сервере, обычно ваша папка public_html и путь к ней),
HTTP_USER_AGENT (название браузера, которым пользуется посетитель),
REMOTE_ADDR (IP-адрес посетителя),
REMOTE_HOST (адрес посетителя в нормальной форме — например, d150.p7.col.ru)
SERVER_ADDR (IP-адрес вашего сайта)
SERVER_NAME и HTTP_HOST (адрес сервера, типа userguide.webservis.ru),
DOCUMENT_URI, REQUEST_URI и SCRIPT_NAME (запрошенная вами страница, типа /examples/mysqlexample.shtml. Сочетание SERVER_NAME и REQUEST_URI даёт привычный вам адрес страницы),
DOCUMENT_NAME (только название файла),
SCRIPT_FILENAME (полный путь к вебстранице на сервере. Например /home/home-webservis/public_html/ и так далее),
SERVER_SOFTWARE (название сервера, например, Apache/1.3.12 (Unix))
SERVER_ADMIN (почтовый адрес владельца сервера, указанный при установке. Когда вы регистрируетесь, имя созданного для вас на Webservis.ru ящика прописывается там),
DATE_LOCAL (сегодняшниее время и дата в вашем часовом поясе),
DATE_GMT (то же, но по Гринвичу),
LAST_MODIFIED (дата и время последнего обновления страницы)

Никаких параметров у этой SSI-команды нет. Просто .

То, что выводит эта команда, когда её обрабатывает сервер Webservis.ru, работающий на Unix и вебсервер, который, быть может, вам захочется установить для тестирования сайта на ваш домашний компьютер под Windows, отличается на добрых две трети. Учитывайте это!

#echo var

Выводит знчение определённой переменной. Например, http:// выведет адрес этой страницы — http://userguide.webservis.ru/creating-ssi.shtml.

#set var value

Присваивает новое значение переменной. Например,

#if, #elif, #else и #endif

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

HTML-код, который будет выводиться, если ВТОРОЕ-УСЛОВИЕ истинно

HTML-код, который будет выводиться, если ПЕРВОЕ-УСЛОВИЕ ложно, а ВТОРОЕ-УСЛОВИЕ истинно

HTML-код, который будет выводиться, если все условия ложны

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

Для группирования условий используются скобки. Пример:


Вы пользуетесь браузером

Microsoft Internet Explorer

неизвестной мне марки

Такой фагмент выведет:

Вы пользуетесь браузером Microsoft Internet Explorer

Ну что, насколько меньше этот фрагмент скрипта на Java, который делает то же самое? А главное это то, что всеми этими условиями занимается сервер, а посетителю страницы выдаётся готовый результат — и он, в отличие от случая с JavaScript, когда он может посмотреть код скрипта, даже не знает, что что-то делалось со страницей.

Поэкспериментируйте с SSI — и через некоторое время вы увидите, как он облегчает жизнь. Размеры страниц поуменьшатся за счёт того, что вы избавитесь от повторения общих для всех страниц фрагментов, да и затраты времени на изменения в страницах будут поменьше.

Единственное, о чём стоит помнить, так это о том, что лучше не использовать SSI-команды при создании страниц в редакторах типа Front Page — они их обычно не понимают и выкидывают, и о том, что одну SSI-команду нельзя вызвать из другой (как нельзя вызвать SSI-команду из скрипта, и (скажу, забегая вперёд) скрипт из скрипта).

6.4 Учебное пособие Apache: введение в технологию Server Side Includes

Перевод

Технология Server-side includes предоставляет средства для добавления динамического содержания к уже существующим документам.

Введение

Связанные модули
MOD INCLUDE
MOD CGI
MOD EXPIRES
Связанные директивы
OPTIONS
XBITHACK
ADDTYPE
SETOUTPUTFILTER
BROWSERMATCHNOCASE

Эта статья описывает технологию Server Side Includes, которую обычно называют просто SSI. В этой статье я расскажу о конфигурировании вашего сервера для разрешения SSI, и объясню некоторые основные методики SSI для добавления динамического содержания к уже существующим HTML-страницам.

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

Что такое SSI?

Технология SSI (Server Side Includes) – это директивы, которые помещаются в HTML-страницы и оцениваются на сервере, когда обращаются к страницам. Она позволяет вам добавлять динамически сгенерированное содержание в существующую HTML-страницу без необходимости обработки всей страницы через CGI-программу или другую динамическую технологию.

Решение о том, когда использовать SSI, и когда ваша страница полностью генерируется какой-либо программой, состоит обычно в вопросе о том, насколько страница является статической, и сколько раз необходимо проводить повторную оценку, когда обращаются к странице. Технология SSI великолепный способ для добавления маленьких кусочков информации, например, текущего времени. Однако, если большая часть вашей страницы генерируется во время обращения к ней, то вам лучше поискать другое решение.

Конфигурирование сервера для разрешения SSI

Чтобы разрешить SSI на вашем сервере, вы должны иметь следующую директиву либо в файле httpd.conf, либо в файле .htaccess:

Options +Includes

Это сообщает серверу Apache, что вы хотите разрешить обработку в файлах директив SSI. Обратите внимание на то, что большинство конфигураций содержат многочисленные директивы OPTIONS, которые могут преодолевать друг друга. Вам, возможно, понадобится Options для определения папки, где вы хотите активизировать SSI, чтобы обеспечить работу этой технологии.

Не любой файл анализируется на наличие директив SSI. Вы должны сообщить серверу Apache, какие файлы следует анализировать. Существует два способа сделать это. Вы можете сообщить серверу Apache, чтобы он анализировал любой файл с особым расширением, таким как .shtml, с помощью следующих директив:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

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

Другой метод – использование директивы XBITHACK:

XBitHack on

Директива XBITHACK просит сервер Apache анализировать файлы на наличие директив SSI, если они имеют исполняемый битовый набор. Таким образом, для добавления директив SSI в существующую страницу, вам следует только сделать файл исполняемым с использованием chmod, не менять название файла.

chmod +x pagename.html

Краткий комментарий о том, что не делать. Вы можете случайно увидеть рекомендации людей о том, чтобы вы только сообщили серверу Apache анализировать все файлы .html на наличие SSI, так что бы вам не надо путаться с названиями файлов .shtml. Эти люди, скорее всего, не слышали о директиве XBITHACK. Следует помнить, что, выполняя такой совет, вы требуете, чтобы сервер Apache просматривал каждый единичный файл, который посылается клиентам, даже если они не содержат каких-либо директив SSI. Это может привести к замедлению работы, и это – не очень хорошая идея.

Конечно, в Windows нет исполняемых битов для установки, что ограничит немного ваши варианты. В своей конфигурации по умолчанию сервер Apache не отсылает последнюю дату обновления или заголовков HTTP длины содержания на SSI-страницах, так как эти значения трудны в расчете для динамического содержания. Это может помешать кешированию вашего документа, и в результате замедлит работу клиента. Есть два способа решить эту задачу:

  1. Используйте конфигурацию XBitHack Full. Она потребует у сервера Apache определить последнюю дату обновления с помощью просмотра только даты создания запрашиваемого файла, игнорируя дату модификации любых включаемых файлов.
  2. Используйте директивы, предоставляемые модулем MOD EXPIRES, для установки явного времени устаревания ваших файлов, что позволит обозревателям и прокси-серверам знать, что они доступны для кеширования.

Основные директивы SSI

Директивы SSI имеют следующий синтаксис:

Они форматируются подобно комментариям в HTML, так что если у вас SSI активизирован некорректно, то обозреватель будет их игнорировать, но они все же останутся видимыми в HTML-источнике. Если у вас технология SSI сконфигурирована правильно, то директивы будут заменяться на их результаты.

Элемент может быть одним из перечня, который мы обсудим подробнее далее. Сейчас посмотрите на примеры того, что вы можете делать с технологией SSI.

Текущая дата

Элемент echo только выводит значение переменной. Существует ряд стандартных переменных, которые включают набор переменных окружения, доступные в CGI-программах. Кроме этого, вы можетет определить свою собственную переменную с помощью элемента set.

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

Today is

Дата обновления файла

This document last modified


Этот элемент тоже подчиняется конфигурациям формата timefmt.

Включение результатов CGI-программы

Это – одно из обычных использований технологии SSI – вывод результатов CGI-программы, например, для любимой всеми программы счетчика посетителей («hit counter»).

Дополнительные примеры

Далее приводится ряд примеров того, что вы можете делать в ваших HTML-документах с технологией SSI.

Когда был модифицирован документ?

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

This file last modified

Конечно, вам нужно будет заменить ssi.shtml на реальное название файла, на который вы ссылаетесь. Может возникнуть проблема, если вы лишь ищите сгенерированную часть кода, которую вы можете вставить в любой файл, так что вместо этого вам, возможно, захочется использовать переменную LAST MODIFIED:

This file last modified

Для получения более подробной информации по формату timefmt, обратитесь к вашему любимому поисковому сайту и поищите strftime. Синтаксис – такой же.

Включение стандартного нижнего колонтитула (footer)

Если вы управляете сайтом, который содержит множество страниц, то вы можете обнаружить, что изменения для всех таких станиц может стать серьезной головной болью, в частности, если вы пытаетесь поддерживать стандартный вид для всех страниц. Использование файла для верхнего (header) и/или нижнего (footer) колонтитула может уменьшить трудности такого обновления. Вы лишь должны сделать один файл нижнего колонтитула (footer), и затем включить его в каждую страницу SSI-командой include. Элемент include может определить, какой файл включить, с помощью атрибутов: либо file, либо virtual. Атрибут file – это путь к файлу, относительный к текущей папке. Это значит, что он не может быть абсолютным путем к файлу (начинающийся с /), и не может содержать ../ как часть пути. Атрибут virtual, возможно, более полезен, и должен определять адрес URL, относительный к извлекаемому документу. Он может начинаться с /, но должен быть на том же сервере, где расположен данный файл.

Я буду часто комбинировать эти два способа, размещая директиву LAST MODIFIED внутри файла нижнего колонтитула (footer), включаемого в файл. SSI-директивы могут комбинироваться во включаемом файле, и включения могут вкладываться друг в друга, т.е., включаемый файл может включать другой файл и т. д.

Что еще я могу сконфигурировать (config)?

Дополнительно к конфигурированию формата времени с помощью config, вы можете использовать config для следующего. Обычно, когда происходит сбой в работе SSI-директивы, вы получаете сообщение:

[an error occurred while processing this directive]

Если вы хотите изменить это сообщение на другое, то вы можете сделать это с помощью атрибута errmsg элемента config:

Надеюсь, что конечный пользователь никогда не увидит такое сообщение, так как вы решить все проблемы до того, как запустите свой сайт. (Хорошо?).

Вы можете с помощью config конфигурировать формат, в котором выводится размеры файлов с помощью атрибута sizefmt. Вы можете определить bytes для полного подсчета в байтах или в abbrev для сокращенного числа в Кб или Мб, соответственно.

Исполняемые команды

Я надеюсь, что через некоторое время в следующие месяцы напишу статью об использовании SSI с маленькими CGI-программами. Ниже показано, что вы можете делать с элементом exec. Вы фактически можете с технологией SSI выполнить команду, используя оболочку (/bin/sh, если быть точным – или оболочку DOS, если у вас Win32). Следующие примеры предоставляют вам перечень директив.

Или для Windows:

Вы могли бы заметить некоторую странность форматирования этой директивы для Windows, так как вывод команды dir содержит строку » «, что сбивает обозреватели.

Обратите внимание на то, что эта особенность очень опасна, так как будет выполнятся любой код, который включен в тег exec. Если у вас ситуация, когда пользователи могут редактировать содержание на ваших веб-страницах, например, на «гостевой странице», убедитесь, что вы отключили эту характеристику. Вы можете разрешить использование SSI, но без функции exec, установив аргумент IncludesNOEXEC для директивы Options.

Расширенные способы технологии SSI

Дополнительно к приведенному содержанию, SSI на сервере Apache предоставляет вам возможность определять переменные и использовать эти переменные в сравнениях и условных операторах.

Предупреждение

Большинство из обсуждаемых здесь характеристик доступны только для серверов Apache 1.2 или выше. Конечно, если вы не используете Apache 1.2 или выше, то вам нужно обновить его немедленно. Делайте. Мы ждем.

Определение переменных

Используя директиву set, вы можете определить переменную для ее использования позже. Нам это понадобится позже при обсуждении, так что мы поговорим об этом здесь. Синтаксис определения следующий:

Дополнительно к определению значений буквально, вы можете использовать любые другие переменные, включая переменные окружения или переменные, обсуждаемые выше (подобно LAST_MODIFIED, например), для предоставления значения переменным. Вы определяете, что что-то является переменной, а не строка литералов, с помощью знака доллара ($) перед именем переменной.

Для использования символа доллара в значение переменной, вам необходимо использовать обратную косую черту для обхода знака доллара.

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

Условные выражения

Теперь, когда мы имеет переменные и способны определять и сравнивать эти значения, мы можем использовать их для выражения условий. Это позволяет технологии SSI быть в своем роде крошечным языком программирования. Модуль MOD INCLUDE предоставляет структуру if, elif, else, endif для создания условных выражений. Это позволяет вам эффективно генерировать несколько логических страниц из одной реальной страницы.

Структура этой условной конструкции:

Условие проверки может быть любого типа из логического сравнения: либо сравнение значений друг с другом, либо проверка на «правду» («truth») определенного значения. (Данная строка является правдой, если она не пустая.) Для получения полного перечня операторов сравнения, доступных вам, смотрите документацию модуля MOD INCLUDE. Здесь приводятся примеры того, как можно использовать эту конструкцию.

В вашем конфигурационном файле вы можете ввести следующие строки:

BrowserMatchNoCase macintosh Mac
BrowserMatchNoCase MSIE InternetExplorer

Это установит переменные окружения “Mac” и “InternetExplorer” как «true», если клиент работает с Internet Explorer на Macintosh.

Затем, в вашем документе с активизированной технологией SSI вы можете ввести следующие строки:

Apologetic text goes here Cool JavaScript code goes here

Обратите внимание на то, что я не имею ничего против IE на Macs – я просто боролся в течение нескольких часов на прошлой неделе, пытаясь заставить работать JavaScript в обозревателе IE на Mac, хотя он работает везде. Вышеуказанное было временным обходным маневром. Любая другая переменная (либо несколько, которые вы определяете, или нормальные переменные окружения) может использоваться в условных выражениях. Со способностью сервера Apache устанавливать переменные окружения с помощью директивы SetEnvIf и другими связанными директивами, эта функциональность может позволить вам привлечь определенную динамическую среду без обращения к CGI.

Заключение

Технология SSI определенно не является заменой для CGI или других технологией, используемыми для генерирования динамических веб-страниц. Однако, это хороший способ добавлять небольшое количество динамического содержания на страницы без выполнения большой дополнительной работы.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL