SSI в примерах


Оглавление (нажмите, чтобы открыть):

Собираем web-страницу из кусочков

SSI (Server Side Includes) — включения на стороне сервера, а точнее это директивы, вставляемые прямо в HTML-код и служащие для передачи указаний Wев-серверу. Встречая такие директивы, которые, кстати, называются SSI-вставками , Web-сервер интерпретирует их и выполняет соответствующие действия: например, вставка HTML-фрагмента из другого файла, динамическое формирование страничек в зависимости от некоторых переменных (например, типа Браузера) и другие.

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

Физически эти блоки представляют собой просто отдельные HTML-файлы, содержащие часть кода, нужную для выполнения их задачи. Например такие элементы сайта как Шапка, Меню, Подвал и т.д. повторяются на всех web-страницах сайта, так почему бы их не вынести в отдельные файлы и просто не подгружать в нужное место каждой html-страницы при загрузке запрашиваемой web-страницы Посететелем. А сборку готовой web-страницы давайте доверим серверу.

Для того, чтобы сервер знал, что страничка не обычная, а содержит SSI-директивы , она имеет специальное расширение: .shtml или .shtm, наличие такого расширения и заставляет web-сервер предварительно обрабатывать web-странички. Вообще-то, расширение может быть любое — в зависимости от конфигурации web-сервера, но в основном применяется именно .shtml.

Полная страничка формируется web-сервером на лету, собирая код странички из таких вот блоков. Для того, чтобы указать серверу, какой блок нужно вставить и в каком месте странички, используется специальная форма записи в виде комментария:

# — признак начала SSI-вставки;
command — SSI-команда;
param — параметры SSI-команды.

SSI-команд насчитывается около десятка, в данной статье будет рассмотрим только самые употребляемые. Самая популярная команда — это команда включения содержимого одного файла в другой:

include — команда вставки;
virtual — параметр, определяющий, как трактовать путь — как абсолютный (file) или как относительный (virtual) ;
«/path/file.ssi» — путь к включаемому файлу.

Результатом ее выполнения будет вставка содержимого файла file.ssi в месте появления данной директивы. При просмотре сформированного исходника HTML-файла мы не увидим никаких признаков SSI, т.к. данный механизм действует абсолютно прозрачно для Браузеров, они получают исключительно корректный HTML-код.

Следующая команда — это команда установки значения переменной:

var — команда установки значения переменной;
pic — имя переменной;
picture.gif — значение переменной.

В данном случае мы определили переменную с именем pic и присвоили ей строковое значение «picture.gif» . Значение переменной pic теперь доступно внутри SSI-вставки, и мы можем его использовать по нашему усмотрению. Например, используя одну и ту же SSI-вставку, но с разными значениями определенной в ней переменной, мы получим различные результаты.

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

Ее выполнение приведет к тому, что в месте появления команды напечатается значение переменной pic, т.е. «picture.gif» .

Переменная может участвовать в выражениях, в этом случае перед ней ставится знак ‘$’ , показывающий, что это именно переменная, а не просто текст:

После такого присвоения переменная B будет содержать строку «123456» . Если же в текст понадобится просто вставить знак ‘$’ или какой-нибудь из других специальных знаков, то его нужно предварить слешем, вот так: ‘\$’ . В некоторых случаях для избежания двусмысленности значение переменной может быть заключено в фигурные скобки: «$» .

Более сложное применение переменных возможно с использованием условных операторов, имеющих следующую форму написания:

condition — условие для сравнения.

В зависимости от результатов проверки мы можем подставить тот или иной фрагмент кода. Допустим, мы можем проанализировать тип Браузера пользователя и в зависимости от этого выдать либо код для Netscape Navigator-а, либо Internet Explorer-а. Это может оказаться полезным в некоторых случаях, когда невозможно сделать страничку, которая корректно отображалась бы в обоих Обозревателях. Вот пример использования условного оператора:

Что угодно, но не понедельник.

В данном случае условием проверки является существование переменной $Monday и, в зависимости от этого, подстановка того или иного HTML-кода.

Теперь давайте рассмотрим реальный пример применения SSI для формирования сложного документа из нескольких SSI-вставок. Вначале напишем текст основного HTML-документа Листинг 1, полагая, что SSI-вставки находятся в каталоге /ssi :

Справочник Веб-дизайнера: Директивы SSI

Последняя модификация: 10.08.2014 г

SSI — Server Side Includes. Учебник

Директивы SSI

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

#include file – включает текст другого файла в текущий файл. Если это cgi-скрипт, запускает его и вставляет в страницу выданный им результат.

Имя включаемого файла не должно содержать путь (он должен находиться в одном каталоге с включающим файлом), но может содержать параметры типа myscript.shtm?myparam=1.

#include virtual – подобно #include file включает текст другого файла в текущий файл или запускает cgi-script. В отличие от #include file может содержать относительный или абсолютный путь без названия протокола (HTTP://) и доменного имени (webdesign.site3k.ru) – то есть, не может указывать на файл другого сайта (для экспорта файлов другого сайта применяется PHP).

В директиве допускаются пути типа:

example/_ssi.html – указывает на файл _ssi.html, находящийся в подкаталоге example текущего каталога.

../_ssi.html – указывает на файл _ssi.html, находящийся в каталоге, в котором вложен текущий (родительском).

/_ssi.html – указывает на файл _ssi.html, находящийся в корневом каталоге сайта (для http://webdesign.site3k.ru/ это файл http://webdesign.site3k.ru/_ssi.html).

#fsize file – Вставляет размер указанного файла. Файл, размер которого определяется, должен находиться на том же сайте, что и файл, содержащий данную инструкцию. Более того, он должен находится либо в том же каталоге, либо во вложеном каталоге.

Например: Выведет размер данного файла: 37K.

Формат размера определяется по SSI-инструкции #config sizefmt.

#fsize virtual – Вставляет размер указанного файла. В отличие от #fsize file может содержать относительный или абсолютный путь без названия протокола (HTTP://) и доменного имени и, таким образом, указывать на файл в другом каталоге того же сайта.

Например: Выведет размер данного файла: 37K.

Формат размера определяется по SSI-инструкции #config sizefmt.

#flastmod file – Вставляет дату последней модификации указанного файла. Файл, дата модификации которого определяется, должен находиться на том же сайте, что и файл, содержащий инструкцию. Так же, он должен находится либо в том же каталоге, либо во вложеном каталоге.

Например: Выведет дату последней модификации данного файла: 10.08.2014 г.

Формат даты определяется по SSI-инструкции #config timefmt.

#flastmod virtual – Вставляет дату последней модификации указанного файла. В отличие от #flastmod file может содержать относительный или абсолютный путь без названия протокола (HTTP://) и доменного имени и, таким образом, указывать на файл в другом каталоге того же сайта.

Например: Выведет дату последней модификации данного файла: 10.08.2014 г.

Формат даты определяется по SSI-инструкции #config timefmt.

#exec cmd – Запускает внешнюю программу и вставляет в содержимое страницы результат ее выполнения.

#exec cgi – Подобно #exec cmd запускает cgi-скрипт и вставляет в содержимое страницы результат его выполнения.

Однако многие дизайнеры рекомендуют использовать для этого #include file или #include virtual, так как #exec cgi может не работать на некоторых серверах.

#config errmsg – определяет сообщение, выводящееся в текст при возникновении ошибки. Поскольку сообщение выводится прямо в текст страницы, может иметь смысл привести его к пустой строке ( ) или попросить посетителя сообщить автору об ошибке ( ).

#config timefmt – определяет формат даты для команды #flastmod file, используя следующие параметры:


Формат SSI-директивы #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

В результате, не подготовленная команда дает следующий вывод: 10.08.2014 г

И эта же команда, после SSI директивы , выдаст: 10.08.2014 г

#config sizefmt – определяет формат размера для команды #fsize file. настраивает на вывод размера файла в килобайтах ( 37K), а – в байтах (37,782)

#printenv – Подобно команде SET старого, доброго DOS-а, выводит текущие значения переменных окружения, такие как:

HTTP_USER_AGENT – название браузера, которым пользуется посетитель.

REMOTE_ADDR – IP-адрес посетителя.

REMOTE_HOST – адрес посетителя в нормальной форме.

SERVER_ADDR – IP-адрес сайта.

SERVER_NAME – адрес сервера.

CHARSET_HTTP_METHOD – протокол ((none))

REQUEST_METHOD – метод запроса страницы (GET)

HTTP_HOST – имя сайта (webdesign.site3k.ru)

REQUEST_URI – вся строка запроса, без указания протокола и имени сайта (/docs/ssi.html)

QUERY_STRING – все, что находилось в адресной строке после вопросительного знака (обычно это параметры форм) Попробуйте вызвать эту страницу с какими-то параметрами после вопросительного знака и вы увидете их здесь ()

SCRIPT_NAME – полный путь к странице от корня сайта (/docs/ssi.html). Сочетание http://, HTTP_HOST и SCRIPT_NAME даёт привычный адрес страницы http://webdesign.site3k.ru/docs/ssi.html).

DOCUMENT_NAME – только название файла. (ssi.html)

HTTP_REFERER – страница, с которой перешли на эту (http://webdesign.site3k.ru/)

SCRIPT_FILENAME – полный путь к странице на сервере (/home/users/s/supervisork/domains/webdesign.site3k.ru/docs/ssi.html)

SERVER_SOFTWARE – название сервера и установленных модулей.

SERVER_ADMIN – почтовый адрес владельца сервера, указанный при установке.

DATE_LOCAL – сегодняшнее время и дата в вашем часовом поясе.

DATE_GMT – то же, но по Гринвичу.

LAST_MODIFIED – дата и время последнего обновления страницы.

Практическое применение команда имеет только для отладки страницы, что очень важно, учитывая тот факт что, у каждого сервера свой набор переменных. Вот что получается в результате ее применения на сайте webdesign.site3k.ru:

Однако, сами переменные, применяются часто. Например в SSI-директиве #echo var.

#echo var – Используется для вывода значения переменной указанной в качестве параметра.

Выводит следующий текст:

В новых версиях SSI по умолчанию команда SSI echo использует кодирование entity и добавлен параметр encoding. Encoding должен задаваться ДО параметра var. Возможные значения encoding:

entity — (по умолчанию) будет произведено преобразование специальных HTML-символов в сущности и русский текст в кодировке Windows-1252 превратится в кракозябры (назначение данного преобразования непонятно);

url — будет произведено escape-преобразование, все символы все английского алфавита приобретут вид %nn, где nn — код символа в 16-ричной кодировке, что позволит их применять в строке URL;

none — не будет производиться никаких преобразований (как и раньше, с той только разницей, что HTML-сущности, которые раньше кодировались, кодироваться не будут и в переменные SSI можно вставлять угловые скобки и амперсанды).

#set var value – Устанавливает значение переменной, если переменной нет – создает. Формат команды set var=»ИМЯ_ПЕРЕМЕННОЙ» value=»ЕЕ_ЗНАЧЕНИЕ«

Например, такой код:

Выведет следующие строки:

Конечно, подменять стандартные переменные окружения может и вовсе не имеет смысла, но назначать свои переменные бывает удобно, например:

Чтобы в нужном месте страницы применить команду

Выглядит так: Это самое наглядное пособие по SSI (обратите внимание, специальные символы в старой версии SSI будут перекодированы так, чтобы отображаться на странице, а не работать, как ожидается.

Естественно, определить переменную, нужно до ее применения на странице.

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

Операции и операторы SSI.

SSI не поддерживает математических вычислений и строковых операций. Однако, SSI-технология поддерживает подстановки, которые можно расценивать как аналог конкатенации. Подстановка позволяет использовать переменные окружения в качестве параметров SSI-директив и комбинировать значения переменных и строк (производить конкатенацию). При подстановке переменные заключаются в фигурные скобки « <>», и предваряются знаком доллара « $» (иногда скобки можно опустить).

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

При необходимости включения в подстановку знаков доллара, слеша, фигурных скобок и кавычек, их предваряют слешем:

#if, #elif, #else и #endif – Условные операторы. Позволяют выполнять код или выводить текст на страницу в зависимости от результата логического сравнения. Код, не соответствующий условию, никоим образом не появится даже при просмотре «исходного текста».

Условие — это либо строка, которая является истинной, если она непустая, или набор операторов сравнения строк. Операторами могут быть:

    Равенство = Неравенство != Меньше Меньше, либо равно Больше > Больше, либо равно >= Отрицание (не верно что) !

Если вторая строка заключена в слеши («/»), она является регулярным выражением. Например, условие истинно, если в первой строке встречается хоть одно вхождение второй строки.

Можно объединять несколько операторов сравнения с помощью операторов && («логическое И») и || («логическое ИЛИ»). Для группирования условий используются скобки. Для включение в условие переменных, их предваряют знаком доллара. Например:

Внимание: Любая SSI-директива должна начинаться с символов (конец комментария). При этом, между концом SSI директивы и дефисами конца комментария должен быть, по крайней мере, один пробел – иначе сервер может не правильно распознать директиву, приняв дефисы и угловую скобку за конец команды.

Особенности SSI скриптов


  • SSI – Server Side Includes переводится как включение со стороны сервера. В самом названии отображаются главные особенности SSI:
  • SSI инструкции не работают на локальных компьютерах, они обрабатываются только ВЕБ-серверами и, то, как будет выглядеть страница в итоге, можно увидеть только поместив ее на сервер и загрузив от туда в браузере. Перед выдачей страницы, сервер считывает ее строку за строкой, и находя SSI-инструкции обрабатывает, вставляя вместо них, результат выполнения. Сами инструкции, в полученной поситителем странице не сохраняются.
  • SSI не может включать файлы с другого домена.
  • SSI поддерживается не всеми серверами и, о его поддержке владельцы серверов обязательно указывают в описании хоста.
  • SSI обрабатывается не во всех файлах. Во многих файлах содержимое просто не анализируется на содержание SSI-инструкций – это делается, чтобы не замедлять работу сервера лишней обработкой. Обрабатываемые типы файлов указываются в описании хоста. Так же, их можно посмотреть в httpd.conf или srm.conf (если у вас есть к ним доступ). На анализ SSI-инструкций указывают строки: Обычно это HTM, HTML и SHTML файлы.
  • Иногда для обработки SSI-директив требуется размещение в корне сайта файла .htaccess (имя начинается с точки), с инструкциями типа Это может быть единственным способом повлиять на работу сервера, если вы не являетесь его администратором.
  • Иногда недобрые админы запрещают выполнение в SSI-директивах PHP-скриптов, и вместо результата выполнения скрипта появляется надпись типа
    «[an error occurred while processing this directive]»
    В этом случае в .htaccess требуется добавить директиву Больше информации о файле .htaccess можно посмотреть на «Настройка файла .htaccess»
  • SSI обрабатывается не во всех каталогах. Для того чтобы в каталоге обрабатывались SSI-директивы, в файле access.conf этот каталог должен быть описан как Options Indexes Includes (или Options Includes), вложенные каталоги наследуют опцию и не требуют отдельной записи. Не у каждого есть доступ к этому файлу, однако, существует общее не писаное правило: на многих хостах содержимое делят на 2 корневые директории: cgi-bin и WWW. В файлах из директории cgi-bin никакие файлы (обычно) не проверяются на SSI-инструкции и никакие файлы (даже включенные по #include virtual) не отображаются в браузерах. Поэтому, файл, являющийся фрагментом страницы и включаемый в нее SSI-директивой НЕ доложен находиться в каталоге cgi-bin – в cgi-bin могут находиться только cgi-скрипты, так как они не включаются в страницу непосредственно (включается только результат их выполнения).
  • SSI-директивы обрабатываются не только в файлах, запрашиваемых посетителем, но и во включаемых в них фрагментах, если те имеют расширение, для которого разрешена проверка на наличие SSI-директив. Это может применяться различным образом, в частности, для обработки переменных, заданных на странице, включающей эти фрагменты.
  • Обычно, любые файлы в WWW-директории можно включить по SSI-директиве include, поэтому сами фрагменты, могут храниться в файлах с любым расширением. Тем не менее, следует учитывать что, HTM и HTML-файлы индексируются поисковыми системами, а значит, те могут послать посетителя на неполный фрагмент страницы (это, конечно, маловероятно, так как для этого на данный фрагмент должна быть проиндексированная ссылка), что, в свою очередь, может разочаровать его и оттолкнуть от сайта. Избежать такого, досадного, курьеза можно несколькими способами:
    1. Не помещая включаемые фрагменты в HTM и HTML файлы.
    2. Ввести в файл robots.txt (см. «Спецификация файла robots.txt») директиву disallow: /НЕКИЙ_СИМВОЛ и имена всех включаемых файлов начинать с этого символа.
    3. Включить код проверки имени файла во все включаемые фрагменты, с тем, чтобы при совпадении имени с именем фрагмента, осуществлять переброску посетителя на другую страницу. Например: Такой код не только даст возможность посетителю попасть на нормальную страницу, но и приведет к тому, что поисковики вскоре перестанут присылать людей на этот фрагмент. Вместо мета-тега можно использовать другие средства, но это может вызвать подозрение в клоакинге (подробности в Клоакинг – технология «Входных дверей (Doorways)»).

Область применения SSI.

Обычно SSI применяется там же, где Frame, Object, Script src= и т. д., например, для включения в WEB-страницу повторяющихся фрагментов (меню, баннерные коды, заголовки). Однако, механизм включения совершенно иной. Если в Frame, Object, Script src= и т. д. включаемый файл просто выдается сервером и уже на месте вставляется агентом пользователя (браузером), то в случае с SSI браузер получает страницу в уже готовом виде. Включение происходит прямо на сервере, а это порождает следующие отличия:

  • При включении типа Frame, Object, Script src= и т. д. посетитель может узнать исходный код страницы, а при SSI-включении – нет. Сокрытие исходного кода может быть полезным автору.
  • При включении типа Frame, Object, Script src= и т. д. требуется логическая завершенность включаемых объектов, а при SSI-внедрении – нет. Это так же, может оказаться удобным, так как позволяет дробить страницу на произвольные фрагменты и выделять в отдельные файлы большее количество общих мест.
  • При включении типа Frame, Object и т. д. к объекту, находящемуся во включенном фрагменте можно обратиться как ИМЯ_ФРАГМЕНТА.ИМЯ_ОБЪЕКТА, а к объекту, внедренному SSI-инструкцией, как к обычному элементу страницы – так проще.
  • При включении типа Frame, Object и т. д. можно разрешить пользователю менять содержимое объектов, а при SSI-внедрении – нет. Это заметно сужает область применения SSI.
  • При включении типа Frame, Object, Script src= и т. д. обработка условий и прочих директив происходит на компьютере посетителя, а при SSI – на сервере. Тем самым SSI-технология замедляет загрузку: выигрыш достигается, только если большие фрагменты либо включаются, либо не включаются, в зависимости от конкретных условий (тогда, хотя и возрастает нагрузка серверного процессора, уменьшается нагрузка на линию связи).
  • Поскольку SSI выполняется сервером, истинный вид страницы, можно увидеть только там, что не удобно. Программы, позволяющие получить SSI на локальном компьютере, дают не совсем тот же вариант, хотя бы за счет различия в переменных типа DOCUMENT_URI. А с учетом непосредственных настроек каждого конкретного сервера, разница может иметь принципиальное значение.
  • При включении типа Frame, Object, Script src= и т. д. включаемый объект загружается только однажды и, при последующем включении, берется из кэша. При SSI-внедрении, фрагмент загружается с каждой новой страницей, ЗНАЧИТЕЛЬНО замедляя загрузку: Это уже совсем плохо.
  • При включении типа Frame, Object, Script src= и т. д. меню находится в одном файле, а при SSI, внедряется в каждую страницу, тем самым, рассредоточивая внутреннюю ссылочную значимость, и портя все дело, когда требуется сосредоточить весь ссылочный вес на главной странице.

Что применять: Frame, Object, Script src= или SSI – личное дело каждого.

Пример из жизни.

Хороший и простой пример вы можете глянуть и на странице Способы хранения веб-страниц: документы FrontPage или базы данных

Активные документы: SSI+ — Server S >

  • Структура команд SSI+
  • Основные команды SSI+
  • Примеры использования SSI+
    • Команда echo
    • Команда set
    • Команда include
    • Команда fsize
    • Команда flastmod
    • Команда exec
    • Команда if
    • Команда goto
    • Команда label
    • Команда break
  • Дополнительные команды
  • Настройки сервера Apache для использования SSI

Технология создания активных документов SSI+ — Server Side Includes предложена фирмой Questar Microsystems. Эту технологию поддерживают такие WWW сервера как Apache, Netscape, Spry Web и Microsoft Internet Information Server (MS IIS).

Поддержка этой технологии связана с специальной конфигурацией WWW сервера и протокола HTTP.

Технология Server side includes (SSI) позволяет использовать в HTML документах такие возможности как: опрос текущего времени и даты, условного выполнения форматирования в зависимости от логических сравнений, формировать запросы или модифицировать базы данных, посылать электронную почту, вызывать программы или CGI scripts.

Возможности технологии SSI+ задают механизм совместного использования языка HTML и программ CGI Script.

Замечание: отметим, что различные сервера (например, Apache или MS IIS) немного поразному интерпретируют команды SSI.

Структура команд SSI+

Формат команды SSI+:

где:

  • ' одна из следующих команд: 'echo', 'include', 'fsize', 'flastmod', 'exec', 'config', 'if', 'goto', 'label', 'break'
  • параметры (атрибуты) команды, значения которых зависят от командой . Формат задания переменных такой же как и формат задания атрибутов для команд языка HTML: '=' '"' variable data '"' '=' '"' variable data2 '"' '=' '"' variable datan '"'
  • '' конец обращения к SSI команде.

Отметим, что в отличии от обычных команд языка HTML для команд SSI+ задание значений переменных-атрибутов должно обязательно заключаться в «двойные кавычки» («) (для языка HTML значения атрибутов заключаются в двойные кавычки только в случае когда они содержат служебные символы или пробелы).
Заметим, что если сервер не поддерживают режима работы SSI, то команды SSI воспринимаются просто как комментарии и не выводятся на экран просмотрщика.

Чаcть команд SSI имеют подкоманды, управляющие их работой, например, команды if, и exec. Формат подкоманды следующий:

где:

  • ‘&&’ зарезервированный символ для обозначения начала и конца подкоманды.
  • имя подкоманды.

Замечание о SSI документах
SSI+ документ по умолчанию имеет суффикс (расширение) '.SHT' (для MS Windows) или '.SHTM' (для UNIX систем) для их отличия от обычных HTML документов, которые имеют расширение '.HTM' или .HTML соотвественно.
При конфигурации сервера можно объявить все документы как SSI, но это снижает его эффективность, но не существенно.

Основные команды SSI+

Включение значений переменных окружения (CGI) в HTML документ.

Установка значений переменной окружения.

Включение файла в HTML документ.

Включение размера файла в HTML документ.

Включение даты последней модификации файла в HTML документ.

Выполнение внешнего исполняемого файла (CGI программы). Выходной поток данных (стандартный вывод) этой программы включается в документ.

Установка параметров для SSI+ команд.

Условный оператор, управляющий выполнением других команд SSI и вывода документа.

Оператор перехода на определенную SSI метку (‘label’).

Метка в документе.

Остановка вывода документа.

Примеры использования SSI

Включение значений переменных окружения в HTML документ. Команда echo имеет только один атрибут var
Пример:


Если данный документ просматривается через просмотрщик MS Internet Explorer 3.0 for Windows 95, то эта команда даст следующий результат

Вы используете просмотрщик Mozilla/2.0 (compatible; MSIE 3.0; Windows 95)

А для просмотрщика, через который вы сейчас читаете этот текст, получим

Вы используете просмотрщик Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8) Gecko/20051107 Firefox/1.5

WWW сервер, который понимает технологию SSI, как правило, использует описанные ниже переменные окружения. Кроме того, если на сервере разрешено выполнение исполняемых модулей (CGI Script программы), то в документе могут быть использованы и переменные окружения CGI.

  1. «DOCUMENT_NAME» локальное имя документа.
  2. «DOCUMENT_URI» локальный путь к документу от базовой директории WWW сервера.
  3. «QUERY_STRING_UNESCAPED» Строка, полученная от клиента, содержащая все shell-special characters escaped with %
  4. «DATE_LOCAL» Текущая локальная дата и время.
  5. «DATE_GMT» Дата и время по Гринвичу (Greenwich).
  6. «LAST_MODIFIED» Дата последней модификации текущего документа.
  7. «REMOTE_ADDR» IP адрес удаленного клиента.
  8. «QUERY_STRING» Строка, полученная от клиента.
  9. «SERVER_SOFTWARE» Имя HTTP server software.
  10. «SERVER_NAME» Имя компьютера, на котором работает WWW сервер.
  11. «GATEWAY_INTERFACE» Имя и версия Common Gateway Interface served WWW (HTTP) сервера (name/version).
  12. «SERVER_PROTOCOL» Имя и версия HTTP сервера (name/version).
  13. «SERVER_PORT» IP порт WWW (HTTP) сервера.
  14. «REQUEST_METHOD» Тип метода запроса к серверу.
  15. «PATH_INFO» Виртуальный путь, указанный в запросе (путь от базовой директории WWW сервера).
  16. «PATH_TRANSLATED» Полный путь, указанный в запросе.
  17. «SCRIPT_NAME» Имя программы для выполнения в CGI запросе.
  18. «REMOTE_HOST» Имя компьютера удаленного клиента.
  19. «AUTH_TYPE» Переменная для определения авторизованного метода доступа к серверу (authentication method).
  20. «REMOTE_USER» Имя пользователя для авторизованного метода доступа.
  21. «REMOTE_IDENT» Имя удаленного клиента, используемое для идентификации пользователя, согласно спецификации RFC931.
  22. «CONTENT_TYPE» Тип передачи данных от клиента по методам POST или PUT.
  23. «CONTENT_LENGTH» Длина в байтах переданных данных по методам POST или PUT.
  24. «HTTP_ACCEPT» Список, разделенный запятыми, MIME типов, понимаемых просмотрщиком клиента.
  25. «HTTP_USER_AGENT» Имя просмотрщика клиента (browser software).
  26. «HTTP_REFERER» ULR адрес HTML документа из которого сделан запрос клиентом.
  27. «HTTP_FROM» Имя (подобное имени Е-mail address) удаленного клиента.
  28. «HTTP_FORWARDED» Имя Proxy Server, через который общается клиент.
  29. «ACCEPT_LANGUGE» Список языков доступных для компьютера клиента.
  30. «HTTP_COOKIE» Содержание ответа клиента на запрос от сервера (см. ниже).

Пример. Вызов документа ssi-var.html выводит значения всех перечисленных выше переменных.

Установка значения переменной окружения.

Параметры (атрибуты):

  • var имя переменной окружения,
  • value устанавливаемое значение.

Пример:

Установка переменных важна при передаче параметров динамическому ресурсу, вызываемому командами include или exec, т.к. для системы они являются дочерним процессом и переменные CGI для них не будут переданы.

‘include’

По команде ‘include’ на место этой команды подставляется содержимое файла, на который она указывает.

Команда имеет два параметра (атрибута):

  • virtual для задания виртуального адреса (URL) ресурса на WWW сервере (ардес не должен содержать указания имя.машины:порт).
  • file для задания абсолютного адреса файла на компьютере, на котором установлен WWW сервер (адрес не должен содержать указаний типа ../).

Пример: Далее между двумя горизонтальными чертами следут вставленный в документ файл include.txt из текущей директории. Начало вставки
Данный текст вставлен в документ из файла iclude.txt
Конец вставки Вид файла include.txt

Замечание: при задании адресов ресурсов можно использовать как полный путь к ресурсу (на сервере) так и частичный.

Отметим, что используя команду include можно вставлять в документ и активные ресурсы (динамические страницы), обрабатываемые WWW сервером, например, PHP скрипты или те же shtml файлы, при этом перед вставкой (в отличие от ASP скриптов сервера MS IIS) сервер произведет обработку этих ресурсов.

fsize

Формат выдачи размера соотвествует установке сервера и может быть изменен командой config.

Команда flastmod включает дату последней модификации файла.
Команда имеет два параметра-переменных:

  • virtual для задания виртуального адреса (URL) ресурса на WWW сервере (ардес не должен содержать указания имя.машины:порт).
  • file для задания абсолютного адреса файла на компьютере, на котором установлен WWW сервер (адрес не должен содержать указаний типа ../).

Пример:
Включение даты последней модификации файла 'ssi.html' в документ:
Дата последней модификации файла ssi.html = Thursday, 11-May-2000 22:00:37 NOVST.

Формат выдачи даты и времени соотвествует установке сервера и может быть изменен командой config.

Выполнение внешних программ и программ CGI Script.

Параметры:

  1. cmd‘ задание командной строки параметров для выполнения UNIX shell исполняемых программ. Формат командной строки: где: полное имя исполняемой программы или команды, и список аргументов, посылаемых исполняемой программе в командной строке.
    Замечание: на сервере должны быть заданы пути к исполняемой программе в переменной окружения ‘PATH’.
    В случае отсутвия пути программу можно запустить, используя shell или CGI Script. Стандартный вывод программы направляется в HTML документ. Вывод может быть модифицирован командой ‘config..cmdecho’ .
  2. cgi‘ вызов программы CGI Script. Вызываемая программа должна находится в директории CGI-BIN WWW сервера или иметь суффикс, например, .cgi, который задан для исполняемых программ в конфигурационном файле сервера (в директории, где находится программа должны быть разрешены Includes и ExecCGI. Формат команды: где полное имя программы CGI Script.
    Стандартный вывод программы подставляется в документ.

Команда config модифицирует вывод в HTML документ.

Параметры-атрибуты команды:

  1. errmsg‘ The errmsg variable is used to set the error message that gets printed when the SSI+ engine encounters a parsing error or unavailable required data. This variable is retained for compatability with standard SSI, you may wish to use the onerr variable instead.
  2. timefmt‘ Установка формата выдачи времемени в команде echo..time SSI+ token output.
  3. sizefmt‘ The sizefmt variable is used to set the format ofecho..size SSI+ token output.
  4. cmdecho‘ The cmdecho variable is used to set the output option of subsequent exec..cmd tokens. The format is ‘cmdecho’='» «‘where is either ‘ON‘ or ‘OFF‘. When the SSI+ parsing engine encounters an exec..cmd token it executes the command. If the command returns output then that output may be echoed into the HTML document or it may be ignored. The format of the data echoed is dependent on the presence or absence of config..cmdprefix and config..cmdpostfix tokens in the document. In the absence of config..cmdprefix and config..cmdpostfix tokens the output will be echoed exactly as returned with no formatting and no special character interpretation. In the presence of config..cmdprefix and/or config..cmdpostfix tokens the output will be formatted and interpreted. To activate echoing set cmdecho to ‘ON’ otherwise set it to ‘OFF’. The default is ‘OFF’.
  5. cmdprefix‘ The cmdprefix variable is used to set the string prefixed to each line out output from subsequent exec..cmd tokens. The format is ‘cmdprefix=»‘ «‘where is any character string and/or HTML format tags. When the SSI+ parsing engine encounters an exec..cmdtoken it executes the command. If the command returns output then that output may be echoed into the HTML document or it maybe ignored. If the output is echoed (see ‘cmdecho’ above),then each line output from the executable will be prefixed with the string supplied before being echoed into the HTML document.
  6. cmdpostfix‘ The cmdpostfix variable is used to set the string appended to the end of each line out output from subsequent exec..cmd tokens. The format is ‘cmdpostfix=»‘ «‘where is any character string and/or HTML format tags. When the SSI+ parsing engine encounters an exec..cmdtoken it executes the command. If the command returns output then that output may be echoed into the HTML document or it maybe ignored. If the output is echoed (see ‘cmdecho’ above),then each line output from the executable will be appended with the string supplied before being echoed into the HTML document.
  7. onerr‘ The onerr variable is used to set the action to be taken when the SSI+ engine encounters an error. The format is ‘onerr=»‘»‘where is one of the following tags.
    • goto‘ causes a jump to a label token (see below). The format of the goto tag is:
      • ‘goto’
      • where is the name of a label defined in a subsequent label tag (see below).
    • print‘ causes text to be printed. The format of the print tag is:
      • ‘print «‘

is any HTML text or tag.

  • error‘ causes the current config..error message to be printed.
  • break‘ causes termination of the HTML document transmission to the client.
  • errorbreak‘ causes the current config..error message to be printed, and then causes termination of the HTML document transmission to the client.
  • printbreak‘ causes text to be printed, and then causes termination of the HTML document transmission to the client. The format of the printbreak tag is the same as the format of the print tag.
  • Example. The following token on an HTML document sets the SSI+ error message to ‘*** ERROR ***’. From this point on down when an error occurs in the SSI+ parsing engine the message ‘*** ERROR ***’will be inserted into the HTML document at the location of the offending SSI+ statement.

    Example. The following token on an HTML document sets the SSI+ error action to print a message and terminate the document. From this point on down when an error occurs in the SSI+ parsing engine the message will be inserted into the HTML document at the location of the offending SSI+ statement, and the document will be terminated

    Example. Suppose you wish to create an HTML document that performs a ‘PING’ operation on address ‘204.96.64.171’ and then echo the results back to the client browser, with each line echoed as an element in an unnumbered list.

    • Insert the following lines into your HTML document:
        • When the document is accessed by a remote browser the output would look something like this:
          • Pinging 204.96.64.171 with 32 bytes of data:
          • Reply from 204.96.64.171: bytes=32 time

          The if tag provides for conditional execution of SSI operations, and conditional printing of HTML text, based on logical comparisons. The format of the if tag is :

          where:

          • is the first operand of a logical comparison statement
          • is the second operand of a logical comparison statement
          • is the logical comparison method [‘==’, ‘!=’,’ ‘, ‘! ‘]
          • is the action to take if the logical comparison evaluates to TRUE [‘goto’, ‘print’, ‘error’, ‘break’, ‘errorbreak’, ‘printbreak’]

          The operands may be any string or number (integer or floating point). In the event that both operands are numbers the comparison will be based on the value of the numbers. In the event that one or both of the operands and not numbers, the comparison will be based on the alphabetic order of the operands.

          The special case of the NULL operand is defined by two quotes with no characters between them. The NULL operand may used to check for the existence of form data from the remote client (see example below).

          • The operator defines what kind of comparison is performed on the operands:
          • ‘==’ The equalto operator evaluates to TRUE if the operands are equal to each other.
          • ‘!=’ The notequalto operator evaluates to TRUE if the operands are not equal to each other.
          • ‘ ‘ The greaterthan operator evaluates to TRUE if operand1 is greater than operand2
          • ‘! ‘ The notgreaterthan operator evaluates to TRUE if operand1 is not greater than operand2
          • ‘hasstring’ The hasstring operator returns TRUE is the text string in operand2 is found in the operand1 string.

          In the event that the logical comparison evaluates to FALSE, nothing happens, If the logical comparison evaluates to TRUE then one of the following operations may be performed:

          • ‘goto’ causes a jump to a label token (see below).The format of the goto tag is:
            • ‘goto’
            • where is the name of a label defined in a subsequent label tag (see below).
          • ‘print’ causes text to be printed. The format of the print tag is:
            • ‘print’

              is any HTML text or tag.


          • ‘error’ causes the current config..error message to be printed.
          • ‘break’ causes termination of the HTML document transmission to the client.
          • ‘errorbreak’ causes the current config..error message to be printed, and then causes termination of the HTML document transmission to the client.
          • ‘printbreak’ causes text to be printed, and then causes termination of the HTML document transmission to the client. The format of the printbreak tag is the same as the format of the print tag.

          Example. The following document fragment compares two numbers, if the operands are not equal then a goto will jump to a label.


          This should not print

          This should print

        Example. The following document fragment demonstrates conditional execution based on data delivered from an HTML form. Suppose we have two form datum called ‘formdata1’ and ‘formdata2’ and we wish to compare them. The following document fragment compares the two operands, if the operands are equal then a goto will jump to a label. Otherwise the next line will print and the document will terminate on a break token (see below).


        The operands are not equal.

      • operands are equal.

      Example. The following document fragment prints two different statements depending on whether or not the client agent is NCSA Mosaic.


      You are not using Mosaic

    • You are using Mosaic

      Example. Suppose we have a form with amongst other things a field named «BOO» and we wish to make sure that the remote client user enterted data into the «BOO» field before submitting the form. The following document fragment checks for the presence of data in the «BOO» field, if data exists then nothing happens, if data does not exist then a message will be displayed and the document will terminate.

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

      "

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

      Замечание: Между символами

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

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

      Задание метки не влияет на форматирование документа.

      Замечание: Между символами

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

      Пример. Следующий документ демонстрирует работу команды break.

      Дополнительные команды SSI+

      Данные команды в настоящий момент не поддерживаются серверами Apache и MS IIS.

      Обращение к внешней ODBC СУБД.

      Отправка электронной почты или представление формы.

      Notice! Due to some problems with the MS ODBC drivers we are phasing out the support of the SSI+ ODBC tags. To impliment ODBC with WebQuest we are using CScript with our WQODBC.DLL. For more information on CScript and ODBC, check out the Guestbook tutorial. The SSI+ ODBC tags will not exist in WebQuest 3.0.

      The odbc tag provides for querying and updating odbc databases. Four variables are defined for the odbc token; ‘debug’, ‘connect’, ‘statement’, and ‘format’.

      ‘debug’ variable

      The debug variable is used to set the SSI+ engine into debug mode. Debug mode prov >»‘ where;

      • is any string and is reserved for future use.

      The connect variable is used to connect to a pre-existing odbc data source, to allow for subsequent statement tag operations on that data source. The format of the connect variable is ‘connect=»‘ ‘,’ ‘,’

      ‘»‘where ;

      • is the name odbc data source as defined on the local system in the odbc configuration utility. CAUTION! the account under which the server is run must be granted permission to access the data source.
      • is the name which to log into the data source.

      is the password with which to access the data source.



    Example. To connect to a data source called ‘odbcsht’ as user ‘dufus’ and password ‘dorkboy’, one would use the following statement: .

    ‘statement’ variable

    The statement variable is used to submit a Transact SQL statement to the odbc data source. The format of a statement variable is as follows: ‘statement=»‘ ‘»‘,where:

    • is any Transact SQL statement as defined in odbc and SQL reference text and help files.

    Example. Suppose one wanted to query the ‘CUSTOMERS’ table from the above connected ‘odbcsht’ database to return all rows and display each row on a separate line. One may use the following sequence of statements:

    1. Connect to the database with a connect token as described above.
    2. Setup the output format with a statement token as described below.
    3. Execute the query:
    4. Each row of the database will the be inserted into the HTML page per the format statement as demonstrated below.

    The format variable is used to prov >'»‘where;

    • is a standard C language printf format string with the restriction of only allowing string (%s) insertions. The user is referred to any C language text for a description of this format. The number of instances of %s must be equal to the number of fields selected in a the subsequent SQL SELECT statement token.

    Example. Suppose one wanted to query the ‘CUSTOMERS’ table from the above connected ‘odbcsht’ database to display the columns ‘name’, ‘age’, and ‘viscosity’ with each row on a separate line. One may use the following sequence of statements:

    1. Connect to the database with a connect token as described above.
    2. Setup the output format: .
    3. Execute the query with a statement token as described above.
    4. Each row of the database will the be inserted into the HTML page per the format statement. For example if the database has 3 rows the HTML output would look something like this:

    • Customer’s name is Conan, and he is 29 years old, he prefers a motor oil with SPF 15 viscosity
    • Customer’s name is Kevin, and he is 45 years old, he prefers a motor oil with SPF 30 viscosity
    • Customer’s name is Alan, and he is 43 years old, he prefers a motor oil with SPF 50 viscosity

    ’email’
    Отправка электронной почты.
    Пример: При отработке данного примера будет отправлено электронное письмо (e-mail), содержание которого задано атрибутом message, по адресу, определенному атрибутом toaddress, если данный адрес и host, заданный атрибутом tohost (данный атрибут может отсутствовать), реально существует.

    The email tag prov >'»‘ where

    • := ‘ON’ to enable debugging
    • := ‘OFF’ to disable debugging, this is the default action if the debug variable is omitted.
  • ‘fromhost’ defines the name of the smtp host sending the mail.
  • ‘tohost’ defines the name of the smtp host the mail will be sent to.
  • ‘fromaddress’ defines the email address from party.
  • ‘toaddress’ defines the email address of the recipient party.
  • ‘message’ defines the message body to be sent.
  • ‘subject’ defines the subject field of the message to be sent.
  • ‘sender’ defines the email address sending party.
  • ‘replyto’ defines the email address to which replies should be sent.
  • ‘cc’ defines the courtesy copy email addresses.
  • ‘inreplyto’ defines the inreplyto field of the message to be sent.
  • ‘id’ defines the id field of the message to be sent.
  • Example. The following document send an email with debugging enabled. Supposewe have a form with datum : [First, Last, Middle Initial, Company,Address1, Address2, City, State, Zip, Country, Phone, Fax, Request,Urgency, ReplyMethod; Email, Subject, Message] we may post thatform to an HTML document containing the following fragment tosend an email.

    SSI в примерах

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

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

    С уважением,
    команда разработчиков eManual.ru

    Описание SSI на русском языке.

    Описание SSI на русском языке
    Server Side Includes Структура команд SSI+ Основные команды SSI+ Примеры использования SSI+ Команда echo Команда include Команда fsize Команда flastmod Команда exec Команда if Команда goto Команда label Команда break

    Технология создания активных документов SSI+ — Server Side Includes предложена фирмой Questar Microsystems. Эту технологию поддерживают такие WWW сервера как Apache , Netscape, Spry Web и Microsoft Internet Information Server.

    Поддержка этой технологии связанна с специальной конфигурацией WWW сервера и протокола HTTP.

    Технология Server side includes (SSI) позволяет использовать в HTML документах такие возможности как: опрос текущего времени и даты, условного выполнения форматирования в зависимости от логических сравнений, формировать запросы или модифицировать базы данных, посылать электронную почту, вызывать программы или CGI scripts.

    Возможности технологии SSI+ задают механизм совместного использования языка HTML и программ CGI Script.

    Формат команды SSI+:

    ‘ »

    где: ‘ одна из следующих команд: ‘echo’, ‘include’,
    ‘fsize’, ‘flastmod’, ‘exec’, ‘config’, ‘odbc’, ’email’, ‘if’,
    ‘goto’, ‘label’, ‘break’ параметры (атрибуты) команды, значения которых зависят от командой . Формат задания переменных такой же как и формат задания атрибутов для команд языка HTML: ‘=’ ‘»‘ variable data ‘»‘ ‘=’ ‘»‘ variable data2 ‘»‘
    ‘=’ ‘»‘ variable datan ‘»‘ » конец обращения к SSI команде. Отметим, что в отличии от обычных команд языка HTML для команд SSI+ задание значений переменных-атрибутов должно обязательно заключаться в «двойные кавычки» («) (для языка HTML значения атрибутов заключаются в двойные кавычки только в случае когда они содержат служебные символы или пробелы).
    Заметим, что если сервер и просмотрщик не поддерживают режима работы SSI, то команды SSI воспринимаются просто как коментарии и не выводятся на экран просмотрщика.

    Чать команд SSI имеют подкоманды, управляющие их работой, например, команды if, odbc, email, и exec. Формат подкоманды следующий:

    ‘&&’ ‘&&’

    где: ‘&&’ зарезерированный символ для обозначения начала и конца подкоманды. имя подкоманды. Замечание о SSI документах
    SSI+ документ по умолчанию имет префикс (расширение) ‘.SHT’ или ‘.SHTM’ для их отличия от обычных HTML документов, которые имеют префикс ‘.HTML’ или .HTM.
    Хотя при конфигурации сервера можно обявить все документы как SSI, но это снижает его эффективность.

    Основные команды SSI+

    ‘echo’ Включение значений CGI переменых в HTML документ.
    ‘include’ Включение файла в HTML документ.
    ‘fsize’ Включение размера файла в HTML документ.
    ‘flastmod’ Включение даты последней модификации файла в HTML документ.
    ‘exec’ Выполнение внешнего исполняемого файла (CGI программы). Выходной поток данных (стандартный вывод) этой программы включается в документ.
    ‘config’ Установка параметров для SSI+ команд.
    ‘odbc’ Оращение к внешней ODBC СУБД.
    ’email’ Отправка электронной почты или представление формы.
    ‘if’ Условный оператор, управляющий выполнением других команд SSI и вывода документа.
    ‘goto’ Оператор перехода на определенную SSI метку (‘label’).
    ‘label’ Метка в документе.
    ‘break’ Остановка вывода документа.

    Включение значений переменных окружения в HTML документ. Команда echo имеет только одну переменную var
    Пример:

    Вы используете просмотрщик

    Если данный документ просматривается через просмотрщик MS Internet Explorer 3.0 for Windows 95, то эта команда даст следующий результат

    Вы используете просмотрщик Mozilla/2.0 (compatible; MSIE 3.0; Windows 95)


    А для просмотрщика, через который вы сейчас читаете этот текст, получим

    Вы используете просмотрщик Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)

    WWW сервер, соторый понимает технологию SSI, как правило, использует описанные ниже переменные окружения. Кроме того, если на сервере разрешено выполнение испольнаяемых модулей (CGI Script программы), то в документе могут быть использованы и переменные окружения CGI. «DOCUMENT_NAME» локальное имя документа. «DOCUMENT_URI» локальный путь к документу от базовой директории WWW сервера. «QUERY_STRING_UNESCAPED» Строка, полученная от клиента, содежащая все shell-special characters escaped with % «DATE_LOCAL» Текущая локальная дата и время. «DATE_GMT» Дата и время по Гринвичу (Greenwich). «LAST_MODIFIED» Дата последней модификации текущего документа. «REMOTE_ADDR» IP адрес удаленного клиента. «QUERY_STRING» Строка, полученная от клиента. «SERVER_SOFTWARE» Имя HTTP server software. «SERVER_NAME» Имя компьютера, на котором работает WWW сервер. «GATEWAY_INTERFACE» Имя и версия Common Gateway Interface served WWW (HTTP) сервера (name/version). «SERVER_PROTOCOL» Имя и версия HTTP сервера (name/version). «SERVER_PORT» IP порт WWW (HTTP) сервера. «REQUEST_METHOD» Тип метода запроса к серверу. «PATH_INFO» Виртуальный путь, указанный в запросе (путь от базовой диретории WWW сервера). «PATH_TRANSLATED» Полный путь, указанный в запросе. «SCRIPT_NAME» Имя программы для выполнения в CGI запросе. «REMOTE_HOST» Имя компьютера удаленного клиента. «AUTH_TYPE» Переменная для определения авторизованного метода доступа к серверу (authentication method). «REMOTE_USER» Имя пользователя для авторизованного метода доступа. «REMOTE_IDENT» Имя удаленного клиета, используемое для идентификации пользователя, согласно спецификации RFC931. «CONTENT_TYPE» Тип передачи данных от клиета по методам POST или PUT. «CONTENT_LENGTH» Длина в байтах переданных данных по методам POST или PUT. «HTTP_ACCEPT» Список, разделенный запятыми, MIME типов, понимаемых просмотрщиком клиента. «HTTP_USER_AGENT» Имя просмотрщика клиента (browser software). «HTTP_REFERER» ULR адрес HTML документа из которого сделан запрос клиентом. «HTTP_FROM» Имя (подобное имени Е-mail address) удаленного клиента. «HTTP_FORWARDED» Имя Proxy Server, через который общается клиент. «ACCEPT_LANGUGE» Список языков доступных для копьютера клиента. «HTTP_COOKIE» Содержение ответа клиента на запрос от сервера (см. ниже).

    По команде ‘include’ на место этой команды подставляется содержимое файла, на который она указывает.

    Команда имеет два параметра-переменных: virtual для задания относительного адреса файла на WWW сервере. file для задания абсолютного адреса файла на компьютере, на которм установлен WWW сервер. Пример:

    Далее между двумя горизонтальными чертами следут вставленный в документ файл include.txt из текущей директории. Начало вставки
    Данный текст вставлен в документ из файла include.txt
    Конец вставки

    fsize Вывод размера файла в документ.
    Команда имеет два параметра-переменных: virtual для задания относительного адреса файла на WWW сервере. file для задания абсолютного адреса файла на компьютере, на которм установлен WWW сервер. Пример:

    Выдача размера файла, который вы в данный момент читаете:
    Размер файла ssi.shtml = 35k

    Формат выдачи размера соответсвует установке сервера и может быть изменен командой config.

    Команда flastmod включает дату последней модификациии файла.
    Команда имеет два параметра-переменных: virtual для задания относительного адреса файла на WWW сервере. file для задания абсолютного адреса файла на компьютере, на которм установлен WWW сервер.

    Пример:

    Включение даты последней модификации файла ‘ssi.shtml’ в документ:
    Дата последней модификации файла ssi.shtml = Monday, 10-Mar-1997 00:00:00 NS.

    Формат выдачи даты и времени соответсвует установке сервера и может быть изменен командой config.

    Выполнене внешних программ и программ CGI Script.

    Парамеры: ‘cmd‘ задане командной строки параметров для выполнения UNIX shell исполняемых программ. Формат командной строки:

    где: полное имя исполняемой программы или команды, и список аргументов, посылаемых исполняемой программе в командной строке.
    Замечание: на сервере должны быть заданы пути к исполняемой программе в переменной окружения ‘PATH’.
    В случае отсутвия пути программу можно запустить, используя shell или CGI Script. Стандартный вывод программы направляется в HTML документ. Вывод может быть модифицирован командой ‘config..cmdecho’. ‘cgi‘ вызов программы CGI Script. Вызываемая программа должна находится в директории CGI-BIN WWW сервера или иметь префикс, например, .cgi, который задан для Shell программ в конфигурационном файле сервера. Формат команды:

    где полное имя программы CGI Script.
    Стандартный вывод программы подставляется в документ.

    Команда config модифицирует вывод в HTML документ.

    Парамеры-атрибуты команды: ‘errmsg‘ The errmsg variable is used to set the error message that gets printed when the SSI+ engine encounters a parsing error or unavailable required data. This variable is retained for compatability with standard SSI, you may wish to use the onerr variable instead. ‘timefmt‘ Установка формата выдачи времемени в команде echo..time SSI+ token output. ‘sizefmt‘ The sizefmt variable is used to set the format ofecho..size SSI+ token output. ‘cmdecho‘ The cmdecho variable is used to set the output option of subsequent exec..cmd tokens. The format is ‘cmdecho’='» «‘where is either ‘ON‘ or ‘OFF‘. When the SSI+ parsing engine encounters an exec..cmd token it executes the command. If the command returns output then that output may be echoed into the HTML document or it may be ignored. The format of the data echoed is dependent on the presence or absence of config..cmdprefix and config..cmdpostfix tokens in the document. In the absence of config..cmdprefix and config..cmdpostfix tokens the output will be echoed exactly as returned with no formatting and no special character interpretation. In the presence of config..cmdprefix and/or config..cmdpostfix tokens the output will be formatted and interpreted. To activate echoing set cmdecho to ‘ON’ otherwise set it to ‘OFF’. The default is ‘OFF’. ‘cmdprefix‘ The cmdprefix variable is used to set the string prefixed to each line out output from subsequent exec..cmd tokens. The format is ‘cmdprefix=»‘ «‘where is any character string and/or HTML format tags. When the SSI+ parsing engine encounters an exec..cmdtoken it executes the command. If the command returns output then that output may be echoed into the HTML document or it maybe ignored. If the output is echoed (see ‘cmdecho’ above),then each line output from the executable will be prefixed with the string supplied before being echoed into the HTML document. ‘cmdpostfix‘ The cmdpostfix variable is used to set the string appended to the end of each line out output from subsequent exec..cmd tokens. The format is ‘cmdpostfix=»‘ «‘where is any character string and/or HTML format tags. When the SSI+ parsing engine encounters an exec..cmdtoken it executes the command. If the command returns output then that output may be echoed into the HTML document or it maybe ignored. If the output is echoed (see ‘cmdecho’ above),then each line output from the executable will be appended with the string supplied before being echoed into the HTML document. ‘onerr‘ The onerr variable is used to set the action to be taken when the SSI+ engine encounters an error. The format is ‘onerr=»‘»‘where is one of the following tags. ‘goto‘ causes a jump to a label token (see below). The format of the goto tag is: ‘goto’ where is the name of a label defined in a subsequent label tag (see below). ‘print‘ causes text to be printed. The format of the print tag is: ‘print «‘

    is any HTML text or tag. ‘error‘ causes the current config..error message to be printed. ‘break‘ causes termination of the HTML document transmission to the client. ‘errorbreak‘ causes the current config..error message to be printed, and then causes termination of the HTML document transmission to the client. ‘printbreak‘ causes text to be printed, and then causes termination of the HTML document transmission to the client. The format of the printbreak tag is the same as the format of the print tag.

    Example. The following token on an HTML document sets the SSI+ error message to ‘*** ERROR ***’. From this point on down when an error occurs in the SSI+ parsing engine the message ‘*** ERROR ***’will be inserted into the HTML document at the location of the offending SSI+ statement.

    Example. The following token on an HTML document sets the SSI+ error action to print a message and terminate the document. From this point on down when an error occurs in the SSI+ parsing engine the message will be inserted into the HTML document at the location of the offending SSI+ statement, and the document will be terminated

    Example. Suppose you wish to create an HTML document that performs a ‘PING’ operation on address ‘204.96.64.171’ and then echo the results back to the client browser, with each line echoed as an element in an unnumbered list. Insert the following lines into your HTML document: When the document is accessed by a remote browser the output would look something like this: Pinging 204.96.64.171 with 32 bytes of data: Reply from 204.96.64.171: bytes=32 time «‘ where; is any string and is reserved for future use.

    The connect variable is used to connect to a pre-existing odbc data source, to allow for subsequent statement tag operations on that data source. The format of the connect variable is ‘connect=»‘ ‘,’ ‘,’

    ‘»‘where ; is the name odbc data source as defined on the local system in the odbc configuration utility. CAUTION! the account under which the server is run must be granted permission to access the data source. is the name which to log into the data source.

    is the password with which to access the data source.

    Example. To connect to a data source called ‘odbcsht’ as user ‘dufus’ and password ‘dorkboy’, one would use the following statement: .

    The statement variable is used to submit a Transact SQL statement to the odbc data source. The format of a statement variable is as follows: ‘statement=»‘ ‘»‘,where: is any Transact SQL statement as defined in odbc and SQL reference text and help files.

    Example. Suppose one wanted to query the ‘CUSTOMERS’ table from the above connected ‘odbcsht’ database to return all rows and display each row on a separate line. One may use the following sequence of statements: Connect to the database with a connect token as described above. Setup the output format with a statement token as described below. Execute the query: Each row of the database will the be inserted into the HTML page per the format statement as demonstrated below.

    The format variable is used to prov >'»‘where; is a standard C language printf format string with the restriction of only allowing string (%s) insertions. The user is referred to any C language text for a description of this format. The number of instances of %s must be equal to the number of fields selected in a the subsequent SQL SELECT statement token.

    Example. Suppose one wanted to query the ‘CUSTOMERS’ table from the above connected ‘odbcsht’ database to display the columns ‘name’, ‘age’, and ‘viscosity’ with each row on a separate line. One may use the following sequence of statements: Connect to the database with a connect token as described above. Setup the output format: . Execute the query with a statement token as described above. Each row of the database will the be inserted into the HTML page per the format statement. For example if the database has 3 rows the HTML output would look something like this: Customer’s name is Conan, and he is 29 years old, he prefers a motor oil with SPF 15 viscosity Customer’s name is Kevin, and he is 45 years old, he prefers a motor oil with SPF 30 viscosity Customer’s name is Alan, and he is 43 years old, he prefers a motor oil with SPF 50 viscosity

    ’email’
    Отправка элктронной почты.
    Пример:

    При отработке данного примера будет отправлено электроное письмо (e-mail), содержание которого задано атрибутом message, по адресу, определенному атрибутом toaddress, если данный адрес и host, заданный атрибутом tohost (данный атрибут может отсутсвовать), реально существует.

    The email tag prov >'»‘ where := ‘ON’ to enable debugging := ‘OFF’ to disable debugging, this is the default action if the debug variable is omitted. ‘fromhost’ defines the name of the smtp host sending the mail. ‘tohost’ defines the name of the smtp host the mail will be sent to. ‘fromaddress’ defines the email address from party. ‘toaddress’ defines the email address of the recipient party. ‘message’ defines the message body to be sent. ‘subject’ defines the subject field of the message to be sent. ‘sender’ defines the email address sending party. ‘replyto’ defines the email address to which replies should be sent. ‘cc’ defines the courtesy copy email addresses. ‘inreplyto’ defines the inreplyto field of the message to be sent. ‘id’ defines the id field of the message to be sent.

    Example. The following document send an email with debugging enabled. Supposewe have a form with datum : [First, Last, Middle Initial, Company,Address1, Address2, City, State, Zip, Country, Phone, Fax, Request,Urgency, ReplyMethod; Email, Subject, Message] we may post thatform to an HTML document containing the following fragment tosend an email.

    The if tag provides for conditional execution of SSI operations, and conditional printing of HTML text, based on logical comparisons. The format of the if tag is :

    where: is the first operand of a logical comparison statement is the second operand of a logical comparison statement is the logical comparison method [‘==’, ‘!=’,’ ‘, ‘! ‘] is the action to take if the logical comparison evaluates to TRUE [‘goto’, ‘print’, ‘error’, ‘break’, ‘errorbreak’, ‘printbreak’]

    The operands may be any string or number (integer or floating point). In the event that both operands are numbers the comparison will be based on the value of the numbers. In the event that one or both of the operands and not numbers, the comparison will be based on the alphabetic order of the operands.

    The special case of the NULL operand is defined by two quotes with no characters between them. The NULL operand may used to check for the existence of form data from the remote client (see example below). The operator defines what kind of comparison is performed on the operands: ‘==’ The equalto operator evaluates to TRUE if the operands are equal to each other. ‘!=’ The notequalto operator evaluates to TRUE if the operands are not equal to each other. ‘ ‘ The greaterthan operator evaluates to TRUE if operand1 is greater than operand2 ‘! ‘ The notgreaterthan operator evaluates to TRUE if operand1 is not greater than operand2 ‘hasstring’ The hasstring operator returns TRUE is the text string in operand2 is found in the operand1 string.

    In the event that the logical comparison evaluates to FALSE, nothing happens, If the logical comparison evaluates to TRUE then one of the following operations may be performed: ‘goto’ causes a jump to a label token (see below).The format of the goto tag is: ‘goto’ where is the name of a label defined in a subsequent label tag (see below). ‘print’ causes text to be printed. The format of the print tag is: ‘print’

    is any HTML text or tag. ‘error’ causes the current config..error message to be printed. ‘break’ causes termination of the HTML document transmission to the client. ‘errorbreak’ causes the current config..error message to be printed, and then causes termination of the HTML document transmission to the client. ‘printbreak’ causes text to be printed, and then causes termination of the HTML document transmission to the client. The format of the printbreak tag is the same as the format of the print tag.

    Example. The following document fragment compares two numbers, if the operands are not equal then a goto will jump to a label.

    This should not print

    This should print

    Example. The following document fragment demonstrates conditional execution based on data delivered from an HTML form. Suppose we have two form datum called ‘formdata1’ and ‘formdata2’ and we wish to compare them. The following document fragment compares the two operands, if the operands are equal then a goto will jump to a label. Otherwise the next line will print and the document will terminate on a break token (see below).

    The operands are not equal.

    operands are equal.

    Example. The following document fragment prints two different statements depending on whether or not the client agent is NCSA Mosaic.

    You are not using Mosaic

    You are using Mosaic

    Example. Suppose we have a form with amongst other things a field named «BOO» and we wish to make sure that the remote client user enterted data into the «BOO» field before submitting the form. The following document fragment checks for the presence of data in the «BOO» field, if data exists then nothing happens, if data does not exist then a message will be displayed and the document will terminate.


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

    «

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

    Пример.

    This line will not print.

    This line will print.

    Замечание: Между сиволами «

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

    Задание метки не влияет на форматирование документа.

    SSI в примерах

    Для начала о причинах, побудивших написать меня эту статью: в обсуждениях членов Всероссийского Клуба Вебмастеров не раз возникали споры о том, что лучше применять в случае повторяющейся разметки (информации) на большом количестве страниц — фреймы, JavaScript или SSI (Server S >(Сразу предвижу возмущение со стороны приверженцев технологий ASP и PHP, с использованием которых также возможны решения подобных задач, поэтому специально для них: технология SSI значительно проще, в ней всего десяток операций, поэтому для не программиста это более удачный выбор хотя бы потому, что ее можно быстрее освоить)

    Дата последней модификации документа
    Простая директива:

    Сегодняшнее число в нужном формате
    Если нам нужно вывести дату не в стандартном для данной конфигурации программных средств виде, а в том, какой нам нужен (например, «вторник, 30 мая, 2000»), то можно воспользоваться следующей конструкцией:Получение дня недели

    Получение названия месяца

    Собственно вывод получившейся строки , ,

    Форматы параметров для config timefmt надо смотреть для каждой конфигурации веб-сервера отдельно. Приведенный пример — FreeBSD, Apache. Более подробно см. man timefmt
    Подобная конструкция используется на веб-узле интернет-магазина Levingston.Ru

    Дата модификации внешнего файла
    Часто на компьютерных сайтах выкладывают прайс-лист в формате MS Excel или Word и каждый раз руками прописывают дату его изготовления. С помощью SSI это делается примерно следующим образом:

    Такая конструкция используется на веб-узле компании Дункан Сервис

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

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

    В примере ниже файл content.html — это тот документ, на который стоит прямая ссылка (допустим, из поисковой машины), frame.html — файл в котором строится фреймовая структура. В QUERY_STRING подставляется значение done для того, чтобы избежать бесконечной вложенности фреймовых структур.

    Подобная конструкция используется на веб-узле интернет-магазина Болеро

    Версия страницы для печати
    Часто возникает прикладная задача — красивый многоколоночный дизайн с верхней и нижней шапками, туча баннеров, но при печати все это не нужно — лишняя бумага, ненужная информация. Поэтому хочется сделать простой альтернативный вид страницы специально для печати. Чтобы это проделать, достаточно подготовить два варианта верхней и нижней шапок, один —для экранного отображения, другой — для печати. В качестве переключения между этими вариантами используем переменную QUERY_STRING. Ниже приведены принципиальные структуры для самой страницы (file.html) и для верхней и нижней шапок (top.html и bottom.html).

    Структура самой страницы (file.html):

    Структура top.html и bottom.html

    Ссылка на каждой странице должна быть видаверсия для печати

    Подобная конструкция используется на веб-узле Всероссийского Клуба Вебмастеров

    Борьба с пунктами меню
    Предположим, у нас есть несколько разделов веб-узла, документы, относящиеся к разделам, лежат в разных директориях. Задача — сделать так, чтобы в меню навигации по этим разделам пропадала (или не подсвечивалась, выделялась другим цветом и т.д.) ссылка на тот раздел, в котором находится пользователь в данный момент. Для этого можно использовать переменную DOCUMENT_URI.

    Подобная конструкция используется веб-узле компании Веб 2000

    Контекстный вывод текста в зависимости от условий
    Предположим, у нас стоит задача менять внешний вид первой страницы узла в зависимости от того, откуда пришел пользователь. Для реализации этой задачи используется следующая конструкция:

    т.е. сравнивается переменная HTTP_REFERER

    Борьба с разными версиями дизайна для разных браузеров
    Всем известно, что браузеры различных производителей и версий по-разному отображают одну и ту же HTML-разметку документа, начиная от специальных тагов и атрибутов и заканчивая поддержкой различных версий JavaScript. Для того, чтобы веб-узел выглядел нормально и для одной версии браузера и для другой или чтобы не сыпались ошибки JavaScript средствами SSI можно сделать проверку версий или браузеров и выдавать различные варианты HTML-разметки. Для этого анализируется переменная HTTP_USER_AGENT, в которой содержится информация о типе и производителе браузера:
    Если версия браузера не ни же 4 или 5, то вывести вариант дизайна, использующий, например, DHTML

    Здесь вывести простой дизайн

    Подобная конструкция использовалась для построения фреймовой структуры и выводе внутреннего меню (для Netscape — на DHTML, для MSIE — на ActiveX) на веб-узле журнала «ОМ»

    Борьба с оформлением результатов работы скриптов
    Самая большая проблема со скриптами заключается в том, что если есть большое количество наработанного ПО — при смене дизайна требуется их перенастройка. Хорошо, если ПО сделано правильно и изменение шаблонов отображения не касается самой математики, однако и в таких случаях существуют проблемы. Например, на странице поиска было бы неплохо крутить баннеры и рекламных сетей, но директивы SSI не отрабатываются в файлах .cgi. Решить подобные проблемы можно использованием SSI следующим образом: не скриптом обрабатывать шаблоны отображения, а вызывать скрипт из HTML-документа через SSI (к сожалению, таким образом можно работать только с теми скриптами, которые используют метод GET — переменная CONTENT_LENGTH не доступна в SSI) Итак, как это делается Есть HTML-документ, который размечен в общем стиле дизайна. В него вставляется директива

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

    zoonman ·ru ПроектыСтатьи и заметки

    Как это включается.

    Чтобы включить этот модуль, в конфигурационный файл httpd.conf Apache нужно включить указание обработки файлов сервером:

    Как правило, а может это так и есть, данный файл расположен по адресу /etc/httpd/httpd.conf если вы работаете под Linux или путь_к_серверу/conf/httpd.conf под Windows. Но помните, из правил бывают и исключения.

    Отмечу такую особенность, что на модуль mod_include еще ссылаются mod_cgi, mod_expires.

    Еще желательно добавить указание разрешения обрабатывать файлы в директории по умолчанию.

    Можно слегка защититься указав директиву IncludesNOEXEC:

    Если вы хотите использовать файл .htaccess для включения парсинга, то в нем нужно указать:

    И не забыть про разрешение обрабатывать файл .htaccess:

    Есть еще один оригинальный метод включения SSI обработки — это директива XBitHack, установка её в on приводит к тому, что все файлы имеющие флаг «выполняемый», будут обрабатываться:

    Для присвоения такого флага для файлов нужно дать команду (при работе в Unix-системах)

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

    1. Использовать XBitHack Full запись в конфигурации. Это приведет к тому, что дата последней модификации будет установлена по дате запрашиваемого файла. Например, ежели запрошен файл projects.shtml , а он включает в себя cms.shtml и profiler.shtml , то дата будет отправлена по файлу projects.shtml .
    2. Использовать директивы модуля mod_expires, которые указывают браузеру и прокси-серверам возможность кэширования страницы.

    В Apache 2.x появилась возможность применения фильтров:

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

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


    element — элемент, команда указывающая на действие

    attribute — атрибут команды

    value — значение атрибута

    Значение атрибута часто бывает заключено в двойные кавычки. Многие команды разрешают только одну пару атрибут=»значение» . Существует замечание относительно окончания команды « , оно должно обязательно отделяться пробелом от выражения, иначе может быть воспринято как часть выражения или, к примеру, значения атрибута.

    Рассмотрим базовые директивы:

    Такая конструкция позволяет просто включить файл my_included_file.inc не производя над ним никаких действий. В качестве такого файла может быть статичная веб-страница.

    Значение атрибута file — это путь относительно директории, содержащей вызываемый документ. Он не может содержать ../ или абсолютный путь, то есть находящейся в той же папке, что и вызывающий файл.

    Интернет технологии (архив 2001-2010)

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

    Server Side Include

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

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

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

    Используется для вывода значения переменной окружения.

    Некоторые переменные:
    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 или include virtual включается cgi-скрипт, то в содержимое страницы попадет вывод cgi-скрипта, а не его содержание.

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

    Вставляет размер указанного файла.
    Например:

    Вставляет время последней модификации указанного файла.
    Например:

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

    Устанавливает значение переменной окружения. Формат такой set var=»ИМЯ_ПЕРЕМЕННОЙ» value=»ЗНАЧЕНИЕ».
    Значение переменной TITLE:

    Значение переменной SERVER_NAME:

    Последняя директива выведет «Лабораторная работа 2».

    Если у вас «шапочка» ( ) вынесена в отдельный файл, и в нем задан основной сайта, то с помощью этой директивы вы сможете дополнить .
    Пример:
    В отельном файле содержащим (например, top.shtml), пишем:
    Сервер Васи Пупкина:

    В файле, куда предыдущий файл вставляется (до директивы вставки), пишем:

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

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

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

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

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

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

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

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

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

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

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

    Эта строка не будет видна

    Эта строка будет видна

    Замечание: Между символами «

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

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

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

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

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

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

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

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

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

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


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

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

    SSI в примерах

    Для начала о причинах, побудивших написать меня эту статью: в обсуждениях членов Всероссийского Клуба Вебмастеров не раз возникали споры о том, что лучше применять в случае повторяющейся разметки (информации) на большом количестве страниц — фреймы, JavaScript или SSI (Server Side Includes). Моим глубоким убеждением является то, что фреймы следует использовать только там, где без этого действительно никак не обойтись, JavaScript (да и любые другие клиентские скрипты) слишком капризен и зависит от настроек браузера, поэтому его можно использовать только для дополнительных возможностей, но никак для простроения, допустим, системы навигации. Я не буду с пеной у рта доказывать, что технология SSI круче всех гор и яиц, а просто приведу решения часто встречающихся на практике задач с применением этой технологии.

    (Сразу предвижу возмущение со стороны приверженцев технологий ASP и PHP, с использованием которых также возможны решения подобных задач, поэтому специально для них: технология SSI значительно проще, в ней всего десяток операций, поэтому для не программиста это более удачный выбор хотя бы потому, что ее можно быстрее освоить)

    Дата последней модификации документа

    Сегодняшнее число в нужном формате

    Если нам нужно вывести дату не в стандартном для данной конфигурации программных средств виде, а в том, какой нам нужен (например, «вторник, 30 мая, 2000»), то можно воспользоваться следующей конструкцией: Получение дня недели

    Получение названия месяца

    Собственно вывод получившейся строки

    Форматы параметров для config timefmt надо смотреть для каждой конфигурации веб-сервера отдельно. Приведенный пример — FreeBSD, Apache. Более подробно см. man timefmt
    Подобная конструкция используется на веб-узле интернет-магазина Levingston.Ru

    Дата модификации внешнего файла

    Часто на компьютерных сайтах выкладывают прайс-лист в формате MS Excel или Word и каждый раз руками прописывают дату его изготовления. С помощью SSI это делается примерно следующим образом:

    Такая конструкция используется на веб-узле компании Дункан Сервис

    Борьба с

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

    Борьба с прямыми ссылками на документы на веб-узле с фреймами

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

    В примере ниже файл content.html — это тот документ, на который стоит прямая ссылка (допустим, из поисковой машины), frame.html — файл в котором строится фреймовая структура. В QUERY_STRING подставляется значение done для того, чтобы избежать бесконечной вложенности фреймовых структур.

    Подобная конструкция используется на веб-узле интернет-магазина Болеро

    Версия страницы для печати

    Часто возникает прикладная задача — красивый многоколоночный дизайн с верхней и нижней шапками, туча баннеров, но при печати все это не нужно — лишняя бумага, ненужная информация. Поэтому хочется сделать простой альтернативный вид страницы специально для печати. Чтобы это проделать, достаточно подготовить два варианта верхней и нижней шапок, один —для экранного отображения, другой — для печати. В качестве переключения между этими вариантами используем переменную QUERY_STRING. Ниже приведены принципиальные структуры для самой страницы (file.html) и для верхней и нижней шапок (top.html и bottom.html).

    Структура самой страницы (file.html):

    Структура top.html и bottom.html

    Ссылка на каждой странице должна быть вида

    Подобная конструкция используется на веб-узле Всероссийского Клуба Вебмастеров

    Борьба с пунктами меню

    Предположим, у нас есть несколько разделов веб-узла, документы, относящиеся к разделам, лежат в разных директориях. Задача — сделать так, чтобы в меню навигации по этим разделам пропадала (или не подсвечивалась, выделялась другим цветом и т.д.) ссылка на тот раздел, в котором находится пользователь в данный момент. Для этого можно использовать переменную DOCUMENT_URI.

    Подобная конструкция используется веб-узле компании Веб 2000

    Контекстный вывод текста в зависимости от условий

    Предположим, у нас стоит задача менять внешний вид первой страницы узла в зависимости от того, откуда пришел пользователь. Для реализации этой задачи используется следующая конструкция:

    т.е. сравнивается переменная HTTP_REFERER

    Борьба с разными версиями дизайна для разных браузеров

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

    Подобная конструкция использовалась для построения фреймовой структуры и выводе внутреннего меню (для Netscape — на DHTML, для MSIE — на ActiveX) на веб-узле журнала «ОМ»

    Борьба с оформлением результатов работы скриптов

    Самая большая проблема со скриптами заключается в том, что если есть большое количество наработанного ПО — при смене дизайна требуется их перенастройка. Хорошо, если ПО сделано правильно и изменение шаблонов отображения не касается самой математики, однако и в таких случаях существуют проблемы. Например, на странице поиска было бы неплохо крутить баннеры и рекламных сетей, но директивы SSI не отрабатываются в файлах .cgi. Решить подобные проблемы можно использованием SSI следующим образом: не скриптом обрабатывать шаблоны отображения, а вызывать скрипт из HTML-документа через SSI (к сожалению, таким образом можно работать только с теми скриптами, которые используют метод GET — переменная CONTENT_LENGTH не доступна в SSI) Итак, как это делается Есть HTML-документ, который размечен в общем стиле дизайна. В него вставляется директива

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

    Подобная конструкция использована в разделе «Голосования» для интернет-супермаркета Levingston.Ru

    Что можно сделать, используя Cookie и SSI

    Часто встречается конструкция на JavaScript, которая выводит «Здравствуйте, Иван Иваныч!» при заходе на страницу веб-узла. То же самое можно проделать с помощью SSI директивой

    Баннеры, кэширование и SSI

    Как известно, баннерные системы предлагают включать в код некоторую случайную величину в URL скрипта показа — защита от кеширования.

    • Можно генерировать всю страницу скриптом, от первого до последнего символа
    • Можно сделать как советуют страницы помощи баннерных систем — включить by SSI скрипт, генерящий случайный баннер
    • Динамически записать часть документа с кодом банера JavaScrip-ом

    А можно еще так:

    То есть как случайная величина выступит количество секунд от 1970 года. Не тратится время и память на запуск скрипта-генератора, Java-Script (как среди некоторых пользователей сейчас это модно) может быть выключен. На мой взгляд вполне радужно
    Все это проверено и применяется нашим администратором на www.j2.ru

    Один шаблон отображения — разное содержание

    Часто шаблоны используют таким образом: <>есть только один файл, который описывает структуру страницы, а основное содержание включается директивой

    Аккуратная настройка SSI

    Аккуратная настройка SSI

    Документация и описания SSI столь же многочисленны, сколь широко применение этого механизма. И тем удивительнее то, как мало внимания уделяется оптимизации SSI и при написании документации, и при использовании SSI на практике.

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

    Все поставленные задачи мы будем решать средствами сервера Apache, ориентируясь на версию 1.3, которая не торопится сдавать свои позиции. Однако все предлагаемые рецепты будут работать и на Apache 2.0. На существенных отличиях между «старым» и «новым» Apache мы будем останавливаться особо.

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

    Судя по названию (Server-Side Includes), основным предназначением SSI является включение файлов. Неудивительно, что наиболее часто разработчики используют SSI-директиву include.

    Например, можно разместить код шапки страницы, общий для всех страниц, в отдельном файле:

    SSI в примерах

    SSI (Server Side Include) — переводится примерно как «включения на стороне сервера».В веб-сервере Apache реализован при помощи модуля mod_include. SSI — это набор команд, позволяющий включить в страницу информацию, недоступную средствами HTML, такую как вывод программ, значения переменных окружения и статистику по файлам (размер, дата создания и др.). SSI работает следующим образом: при получении запроса на документ, содержащий директивы SSI, web-сервер обрабатывает документ, выполняет все директивы SSI, а получившийся в результате документ возвращает клиенту.

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

    Так же у каждой директивы существуют свои параметры отвечающие за то или иное действие или вывод информации.

    Примеры использования SSI:

    echo var — Используется для вывода переменных окружения.

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

    fsize virtual — Вставляет размер указанного файла.

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

    AddType text/html .shtml .html .htm AddHandler server-parsed .shtml .html .htm Options Indexes FollowSymLinks Includes

    Мастер Йода рекомендует:  Введение в протокол UDP
    Добавить комментарий
    Рубрика: Веб / Веб