![]() |
||
|
aranea.ru || Что такое SSI (Server Side Includes)? | 6.4 Учебное пособие Apache: введение в технологию Server Side Includes
6.4 Учебное пособие Apache: введение в технологию Server Side IncludesПереводТехнология Server-side includes предоставляет средства для добавления динамического содержания к уже существующим документам. Введение
Эта статья описывает технологию Server Side Includes, которую обычно называют просто SSI. В этой статье я расскажу о конфигурировании вашего сервера для разрешения SSI, и объясню некоторые основные методики SSI для добавления динамического содержания к уже существующим HTML-страницам. В последней части статьи мы поговорим о расширенных возможностях, которые можно выполнять с помощью SSI, т.е. условные выражения в ваших директивах SSI. Что такое SSI?Технология SSI (Server Side Includes) – это директивы, которые помещаются в HTML-страницы и оцениваются на сервере, когда обращаются к страницам. Она позволяет вам добавлять динамически сгенерированное содержание в существующую HTML-страницу без необходимости обработки всей страницы через CGI-программу или другую динамическую технологию. Решение о том, когда использовать SSI, и когда ваша страница полностью генерируется какой-либо программой, состоит обычно в вопросе о том, насколько страница является статической, и сколько раз необходимо проводить повторную оценку, когда обращаются к странице. Технология SSI великолепный способ для добавления маленьких кусочков информации, например, текущего времени. Однако, если большая часть вашей страницы генерируется во время обращения к ней, то вам лучше поискать другое решение. Конфигурирование сервера для разрешения SSIЧтобы разрешить SSI на вашем сервере, вы должны иметь следующую директиву либо в файле httpd.conf, либо в файле .htaccess:
Это сообщает серверу Apache, что вы хотите разрешить обработку в файлах директив SSI. Обратите внимание на то, что большинство конфигураций содержат многочисленные директивы OPTIONS, которые могут преодолевать друг друга. Вам, возможно, понадобится Options для определения папки, где вы хотите активизировать SSI, чтобы обеспечить работу этой технологии. Не любой файл анализируется на наличие директив SSI. Вы должны сообщить серверу Apache, какие файлы следует анализировать. Существует два способа сделать это. Вы можете сообщить серверу Apache, чтобы он анализировал любой файл с особым расширением, таким как .shtml, с помощью следующих директив:
Есть один недостаток для такого подхода, так если вы захотели добавить директивы SSI к существующей странице, то вам необходимо изменить название этой страницы, и все ссылки на эту страницу, чтобы сделать расширение .shtml, для выполнения директив. Другой метод – использование директивы XBITHACK:
Директива XBITHACK просит сервер Apache анализировать файлы на наличие директив SSI, если они имеют исполняемый битовый набор. Таким образом, для добавления директив SSI в существующую страницу, вам следует только сделать файл исполняемым с использованием chmod, не менять название файла.
Краткий комментарий о том, что не делать. Вы можете случайно увидеть рекомендации людей о том, чтобы вы только сообщили серверу Apache анализировать все файлы .html на наличие SSI, так что бы вам не надо путаться с названиями файлов .shtml. Эти люди, скорее всего, не слышали о директиве XBITHACK. Следует помнить, что, выполняя такой совет, вы требуете, чтобы сервер Apache просматривал каждый единичный файл, который посылается клиентам, даже если они не содержат каких-либо директив SSI. Это может привести к замедлению работы, и это – не очень хорошая идея. Конечно, в Windows нет исполняемых битов для установки, что ограничит немного ваши варианты. В своей конфигурации по умолчанию сервер Apache не отсылает последнюю дату обновления или заголовков HTTP длины содержания на SSI-страницах, так как эти значения трудны в расчете для динамического содержания. Это может помешать кешированию вашего документа, и в результате замедлит работу клиента. Есть два способа решить эту задачу:
Основные директивы SSIДирективы SSI имеют следующий синтаксис:
Они форматируются подобно комментариям в HTML, так что если у вас SSI активизирован некорректно, то обозреватель будет их игнорировать, но они все же останутся видимыми в HTML-источнике. Если у вас технология SSI сконфигурирована правильно, то директивы будут заменяться на их результаты. Элемент может быть одним из перечня, который мы обсудим подробнее далее. Сейчас посмотрите на примеры того, что вы можете делать с технологией SSI. Текущая дата
Элемент echo только выводит значение переменной. Существует ряд стандартных переменных, которые включают набор переменных окружения, доступные в CGI-программах. Кроме этого, вы можетет определить свою собственную переменную с помощью элемента set. Если вы не хотите формат по умолчанию, в котором выводится дата, то можно использовать элемент config с атрибутом timefmt для модификации такого формата.
Дата обновления файла
Этот элемент тоже подчиняется конфигурациям формата timefmt. Включение результатов CGI-программыЭто – одно из обычных использований технологии SSI – вывод результатов CGI-программы, например, для любимой всеми программы счетчика посетителей ("hit counter").
Дополнительные примерыДалее приводится ряд примеров того, что вы можете делать в ваших HTML-документах с технологией SSI. Когда был модифицирован документ?Выше мы упоминали о том, что вы можете использовать SSI для информирования пользователя о том, когда документ был изменен в последний раз. Однако, фактический метод для осуществления этого остался не раскрытым. Следующий код, размещенный в вашем HTML-документе, поместит временную метку на вашу страницу. Конечно, вы должны корректно активизировать технологию SSI, как обсуждалось выше.
Конечно, вам нужно будет заменить ssi.shtml на реальное название файла, на который вы ссылаетесь. Может возникнуть проблема, если вы лишь ищите сгенерированную часть кода, которую вы можете вставить в любой файл, так что вместо этого вам, возможно, захочется использовать переменную LAST MODIFIED:
Для получения более подробной информации по формату timefmt, обратитесь к вашему любимому поисковому сайту и поищите strftime. Синтаксис – такой же. Включение стандартного нижнего колонтитула (footer)Если вы управляете сайтом, который содержит множество страниц, то вы можете обнаружить, что изменения для всех таких станиц может стать серьезной головной болью, в частности, если вы пытаетесь поддерживать стандартный вид для всех страниц. Использование файла для верхнего (header) и/или нижнего (footer) колонтитула может уменьшить трудности такого обновления. Вы лишь должны сделать один файл нижнего колонтитула (footer), и затем включить его в каждую страницу SSI-командой include. Элемент include может определить, какой файл включить, с помощью атрибутов: либо file, либо virtual. Атрибут file – это путь к файлу, относительный к текущей папке. Это значит, что он не может быть абсолютным путем к файлу (начинающийся с /), и не может содержать ../ как часть пути. Атрибут virtual, возможно, более полезен, и должен определять адрес URL, относительный к извлекаемому документу. Он может начинаться с /, но должен быть на том же сервере, где расположен данный файл.
Я буду часто комбинировать эти два способа, размещая директиву LAST MODIFIED внутри файла нижнего колонтитула (footer), включаемого в файл. SSI-директивы могут комбинироваться во включаемом файле, и включения могут вкладываться друг в друга, т.е., включаемый файл может включать другой файл и т. д. Что еще я могу сконфигурировать (config)?Дополнительно к конфигурированию формата времени с помощью config, вы можете использовать config для следующего. Обычно, когда происходит сбой в работе SSI-директивы, вы получаете сообщение:
Если вы хотите изменить это сообщение на другое, то вы можете сделать это с помощью атрибута errmsg элемента config:
Надеюсь, что конечный пользователь никогда не увидит такое сообщение, так как вы решить все проблемы до того, как запустите свой сайт. (Хорошо?). Вы можете с помощью config конфигурировать формат, в котором выводится размеры файлов с помощью атрибута sizefmt. Вы можете определить bytes для полного подсчета в байтах или в abbrev для сокращенного числа в Кб или Мб, соответственно. Исполняемые командыЯ надеюсь, что через некоторое время в следующие месяцы напишу статью об использовании SSI с маленькими CGI-программами. Ниже показано, что вы можете делать с элементом exec. Вы фактически можете с технологией SSI выполнить команду, используя оболочку (/bin/sh, если быть точным – или оболочку DOS, если у вас Win32). Следующие примеры предоставляют вам перечень директив.
Или для Windows:
Вы могли бы заметить некоторую странность форматирования этой директивы для Windows, так как вывод команды dir содержит строку "<dir>", что сбивает обозреватели. Обратите внимание на то, что эта особенность очень опасна, так как будет выполнятся любой код, который включен в тег exec. Если у вас ситуация, когда пользователи могут редактировать содержание на ваших веб-страницах, например, на "гостевой странице", убедитесь, что вы отключили эту характеристику. Вы можете разрешить использование SSI, но без функции exec, установив аргумент IncludesNOEXEC для директивы Options. Расширенные способы технологии SSIДополнительно к приведенному содержанию, SSI на сервере Apache предоставляет вам возможность определять переменные и использовать эти переменные в сравнениях и условных операторах. ПредупреждениеБольшинство из обсуждаемых здесь характеристик доступны только для серверов Apache 1.2 или выше. Конечно, если вы не используете Apache 1.2 или выше, то вам нужно обновить его немедленно. Делайте. Мы ждем. Определение переменныхИспользуя директиву set, вы можете определить переменную для ее использования позже. Нам это понадобится позже при обсуждении, так что мы поговорим об этом здесь. Синтаксис определения следующий:
Дополнительно к определению значений буквально, вы можете использовать любые другие переменные, включая переменные окружения или переменные, обсуждаемые выше (подобно LAST_MODIFIED, например), для предоставления значения переменным. Вы определяете, что что-то является переменной, а не строка литералов, с помощью знака доллара ($) перед именем переменной.
Для использования символа доллара в значение переменной, вам необходимо использовать обратную косую черту для обхода знака доллара.
Наконец, если вы хотите разместить переменную в середине длинной строки, и есть возможность, что название переменной можно спутать с другими символами, вы можете поместить ее название внутри фигурных скобок, для решения этой проблемы (Трудно привести действительно хороший пример, но надеюсь вы получите представление.)
Условные выраженияТеперь, когда мы имеет переменные и способны определять и сравнивать эти значения, мы можем использовать их для выражения условий. Это позволяет технологии SSI быть в своем роде крошечным языком программирования. Модуль MOD INCLUDE предоставляет структуру if, elif, else, endif для создания условных выражений. Это позволяет вам эффективно генерировать несколько логических страниц из одной реальной страницы. Структура этой условной конструкции:
Условие проверки может быть любого типа из логического сравнения: либо сравнение значений друг с другом, либо проверка на "правду" ("truth") определенного значения. (Данная строка является правдой, если она не пустая.) Для получения полного перечня операторов сравнения, доступных вам, смотрите документацию модуля MOD INCLUDE. Здесь приводятся примеры того, как можно использовать эту конструкцию. В вашем конфигурационном файле вы можете ввести следующие строки:
Это установит переменные окружения “Mac” и “InternetExplorer” как "true", если клиент работает с Internet Explorer на Macintosh. Затем, в вашем документе с активизированной технологией SSI вы можете ввести следующие строки:
Обратите внимание на то, что я не имею ничего против IE на Macs – я просто боролся в течение нескольких часов на прошлой неделе, пытаясь заставить работать JavaScript в обозревателе IE на Mac, хотя он работает везде. Вышеуказанное было временным обходным маневром. Любая другая переменная (либо несколько, которые вы определяете, или нормальные переменные окружения) может использоваться в условных выражениях. Со способностью сервера Apache устанавливать переменные окружения с помощью директивы SetEnvIf и другими связанными директивами, эта функциональность может позволить вам привлечь определенную динамическую среду без обращения к CGI. ЗаключениеТехнология SSI определенно не является заменой для CGI или других технологией, используемыми для генерирования динамических веб-страниц. Однако, это хороший способ добавлять небольшое количество динамического содержания на страницы без выполнения большой дополнительной работы. |