ИНФОРМАЦИЯ,    ДИЗАЙН,    ПЕРЕВОДЫ,    РЕКЛАМА   .   .   .
w a p - с а й т
Информационный портал
Сегодня:  
admin@aranea.ru
+79068922256



  aranea.ru || Что такое SSI (Server Side Includes)? | 6.4 Учебное пособие Apache: введение в технологию Server Side Includes

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

Перевод

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

Введение

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

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

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

Что такое SSI?

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

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

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

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

Options +Includes

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

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

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

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

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

XBitHack on

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

chmod +x pagename.html

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

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

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

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

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

<!--#element attribute=value attribute=value -->

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

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

Текущая дата

<!--#echo var="DATE_LOCAL" -->

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

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

<!--#config timefmt="%A %B %d, %Y" --> Today is <!--#echo var="DATE LOCAL" -->

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

This document last modified <!--#flastmod file="index.html" -->

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

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

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

<!--#include virtual="/cgi-bin/counter.pl" -->

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

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

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

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

<!--#config timefmt="%A %B %d, %Y" -->
This file last modified <!--#flastmod file="ssi.shtml" -->

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

<!--#config timefmt="%D" -->
This file last modified <!--#echo var="LAST MODIFIED" -->

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

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

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

<!--#include virtual="/footer.html" -->

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

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

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

[an error occurred while processing this directive]

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

<!--#config errmsg="[It appears that you don’t know how to use SSI]" -->

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

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

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

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

<pre>
<!--#exec cmd="ls" -->
</pre>

Или для Windows:

<pre>
<!--#exec cmd="dir" -->
</pre>

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

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

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

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

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

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

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

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

<!--#set var="name" value="Rich" -->

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

<!--#set var="modified" value="$LAST MODIFIED" -->

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

<!--#set var="cost" value="\$100" -->

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

<!--#set var="date" value="${DATE LOCAL} ${DATE GMT}" -->

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

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

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

<!--#if expr="test condition" -->
<!--#elif expr="test condition" -->
<!--#else -->
<!--#endif -->

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

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

BrowserMatchNoCase macintosh Mac
BrowserMatchNoCase MSIE InternetExplorer

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

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

<!--#if expr="${Mac} && ${InternetExplorer}" -->
Apologetic text goes here <!--#else --> Cool JavaScript code goes here <!--#endif -->

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

Заключение

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

Резюме по Server Side Includes (SSI)

Copyright © 2006 -  aranea.ru