Что такое SSI. Учебное пособие Apache: введение в технологию Server Side Includes

Сервер Apache может реализовывать несколько механизмов для генерации динамического содержимого. Рассмотрим один из простейших — метод вставок или SSI (Server Side Includes, включения на стороне сервера).

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

Следует отметить, что SSI представляет собой механизм добавления динамического содержимого ограниченного объема к web-страницам. В соответствии с этим методом часть или все содержимое, имеющееся в наличии на сервере, маркируется как потенциально содержащее код SSI, включенный в код HTML. При обслуживании страницы сервер Apache сначала просматривает ее на наличие инструкций SSI и вносит изменения в соответствии с обнаруженными инструкциями в передаваемый браузеру пользователя результат. Поддержка данной технологии включена в Apache, но отключена обработка по умолчанию и основной причиной этого является падение производительности, ведь сервер будет вынужден просматривать всё передаваемое содержимое, либо как минимум какую-то часть передаваемого содержимого, что естественно ведёт к повышению нагрузки по сравнению с простой отдачей страниц пользователю. По той же причине, при включении обработки, рекомендуется ограничить действие SSI как можно меньшим числом каталогов или/и файлов. Технологии SSI в архитектуре web-сервера Apache реализуется модулем «mod_include», обрабатывающий любой документ, для которого в конфигурации указан обработчик «server-parsed». Также любой документ, имеющий MIME-тип text/x-server-parsed-html или text/x-server-parsed-htmls будет проанализирован данным модулем из-за соображений обратной совместимости. Кроме того можно принудительно указать «фильтр» для вывода файлов определённого типа.

Для включения возможности использования SSI используется директива «Options +Include», либо, для немного более безопасного метода включения этого режима и исключающая запуск сценариев: «Options +IncludeNOEXEC».

Чтобы включить обработку SSI-инструкций для всех файлов с расширением html, необходимо указать следующие инструкции:

    Options +Includes

    AddOutputFilter INCLUDES .html

Указывать эти инстукции можно как в глобальном файле конфигурации веб-сервера (httpd.conf), так и в.htaccess, расположенном в некотором каталоге.

Из соображений повышения производительности необходимо произвести разделение страниц с использованием конструкций SSI и без них, это может быть реализовано двумя путями:

  1. Выделить отдельный каталог для файлов, имеющих SSI. Диапазон действия директивы может быть ограничен парой директив Location, или директив Directory, или размещением в файле.htaccess, находящемся в этом каталоге. Например:

      Options +Includes

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

      AddType text/html .shtml

      AddOutputFilter INCLUDES .shtml

Директивы во втором варианте сообщает серверу, что файлы с расширением shtml соответствуют MIME-типу text/html, а также что перед передачей таких файлов их нужно «пропускать через фильтр», который и будет обрабатывать SSI-инструкции. Конечно использовать именно расширение. shtml не обязательно, но такой метод является наиболее традиционным.

Единственной директивой модуля mod_include является директива XBitCrack. Если ее установить в значение on, это будет означать, что сервер станет рассматривать как SSI-документы только те файлы, у которых в файловой системе установлен бит «executive».

    XBitCrack on

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

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

Команды SSI

Инструкции SSI имеют вид:

Следует заметить, что с точки зрения HTML такая инструкция является комментарием.

Команда echo

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

    IP клиента -

    Браузер клиента -

    Сервер -

    Переход со страницы -

Команда include

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

Файл, который будет подключаться в документу, указывается в значении одного из двух возможных атрибутов: file или virtual. Их различие в том, что значением file должен быть путь к файлу относительного текущей папки (например: "../../files/somefile.html"). Значением атрибута virtual может содержать URL с одним лишь ограничением — этот URL должен принадлежать тому же серверу, на котором расположен документ, в который производится вставка.

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

Команда flastmod

Команда предназначена для вывод даты-времени последней модификации файла.

    Файл "any_file.doc" последний раз менялся:

Формат вывод этой команды можно настроить командой config, меняя значение timefmt.

Команда printenv

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

Ветвление с помощью SSI

SSI позволяет выполнять ветвление. По сути процесс сводится к тому, что в зависимости от условия какие-то части документа выводятся, а какие-то не выводятся. Применяются if, elif, else, endif.

    Содержимое одной ветки

    Содержимое другой ветки

    Содержимое третьей ветки

Условие представляет собой логическое выражение, сравнение или проверка истинности.

    Ваше местоположение на сайте:

    Главная страница

|| Что такое 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:

Options +Includes

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

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

Директива 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 имеют следующий синтаксис:

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

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

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

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

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

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


This file last modified

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

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

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

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

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

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

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

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

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

", что сбивает обозреватели.

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

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

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

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

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

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

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

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

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

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

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

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

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


Apologetic text goes here Cool JavaScript code goes here

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

Заключение

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

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

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

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

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

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

Например:

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

Например:

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

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

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

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

Например:

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

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

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

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

Например,

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

Например,

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

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

Формат 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 – определяет формат размера для команды . настраивает на вывод размера файла в килобайтах (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 – имя сайта (сайт)

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

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

SCRIPT_NAME – полный путь к странице от корня сайта (/docs/ssi.html)..html).

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

HTTP_REFERER – страница, с которой перешли на эту ((none))

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

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

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

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

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

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

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

Downgrade-1..9.142.17 HTTP_X_PROTOCOL=HTTP/1.1 HTTP_X_SERVER_IP=81.177.135.112 HTTP_X_FORWARDED_FOR=5.9.142.17 HTTP_X_FORWARDED_PROTOCOL=http HTTP_CONNECTION=close HTTP_USER_AGENT=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot..177.135.112 SERVER_PORT=80 REMOTE_ADDR=5.9.142..ru SCRIPT_FILENAME=/home/users/s/supervisork/domains/сайт/docs/ssi.html REMOTE_PORT=52812 GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.0 REQUEST_METHOD=GET QUERY_STRING= REQUEST_URI=/docs/ssi.html SCRIPT_NAME=/docs/ssi.html DATE_LOCAL=03.04.2019 г DATE_GMT=03.04.2019 г LAST_MODIFIED=10.08.2014 г DOCUMENT_URI=/docs/ssi.html USER_NAME=supervisork DOCUMENT_NAME=ssi.html WORDS= KEYW= DESCRIP= TITL= HEAD= ROB=index, follow BROWSER=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) DIR= PER=YES

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

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

Например:

Ваш IP – Ваш браузер – Мой сервер – Вы пришли со страницы – Вы находитесь на странице – http://

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

Ваш IP – 5.9.142.17 Ваш браузер – Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) Мой сервер – webdesign.site3k..html

В новых версиях 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=" ЕЕ_ЗНАЧЕНИЕ"

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

Значение переменной SERVER_NAME=«" » Сменим значение: Теперь значение переменной SERVER_NAME=« »

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

Значение переменной SERVER_NAME=«сайт» Сменим значение: Теперь значение переменной SERVER_NAME=«discoverer.by.ru»

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

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

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

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

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

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

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

Например:

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

Http://сайт/docs/ssi.html

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

\$ \/ \" \{ \}

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

Формат оператора:

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

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

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

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

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

Страница запрошена браузером Opera браузером Microsoft Internet Explorer браузером Netscape Navigator поисковым роботом

Результат:

Страница запрошена браузером Netscape Navigator

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

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

  • SSI – Server Side Includes переводится как включение со стороны сервера. В самом названии отображаются главные особенности SSI:
  • SSI инструкции не работают на локальных компьютерах, они обрабатываются только ВЕБ-серверами и, то, как будет выглядеть страница в итоге, можно увидеть только поместив ее на сервер и загрузив от туда в браузере. Перед выдачей страницы, сервер считывает ее строку за строкой, и находя SSI-инструкции обрабатывает, вставляя вместо них, результат выполнения. Сами инструкции, в полученной поситителем странице не сохраняются.
  • SSI не может включать файлы с другого домена.
  • SSI поддерживается не всеми серверами и, о его поддержке владельцы серверов обязательно указывают в описании хоста.
  • SSI обрабатывается не во всех файлах. Во многих файлах содержимое просто не анализируется на содержание SSI-инструкций – это делается, чтобы не замедлять работу сервера лишней обработкой. Обрабатываемые типы файлов указываются в описании хоста. Так же, их можно посмотреть в httpd.conf или srm.conf (если у вас есть к ним доступ). На анализ SSI-инструкций указывают строки: AddType text/html .shtml AddHandler server-parsed .shtml Обычно это HTM, HTML и SHTML файлы.
  • Иногда для обработки SSI-директив требуется размещение в корне сайта файла.htaccess (имя начинается с точки), с инструкциями типа AddHandler server-parsed .shtml AddHandler server-parsed .html Это может быть единственным способом повлиять на работу сервера, если вы не являетесь его администратором.
  • Иногда недобрые админы запрещают выполнение в SSI-директивах PHP-скриптов, и вместо результата выполнения скрипта появляется надпись типа
    ""
    В этом случае в .htaccess требуется добавить директиву Options +Includes Больше информации о файле.htaccess можно посмотреть на «Настройка файла.htaccess»
  • SSI обрабатывается не во всех каталогах. Для того чтобы в каталоге обрабатывались SSI-директивы, в файле access.conf этот каталог должен быть описан как Options Indexes Includes (или Options Includes), вложенные каталоги наследуют опцию и не требуют отдельной записи. Не у каждого есть доступ к этому файлу, однако, существует общее не писаное правило: на многих хостах содержимое делят на 2 корневые директории: cgi-bin и WWW. В файлах из директории cgi-bin никакие файлы (обычно) не проверяются на SSI-инструкции и никакие файлы (даже включенные по ) не отображаются в браузерах. Поэтому, файл, являющийся фрагментом страницы и включаемый в нее SSI-директивой НЕ доложен находиться в каталоге cgi-bin – в cgi-bin могут находиться только cgi-скрипты, так как они не включаются в страницу непосредственно (включается только результат их выполнения).
  • SSI-директивы обрабатываются не только в файлах, запрашиваемых посетителем, но и во включаемых в них фрагментах, если те имеют расширение, для которого разрешена проверка на наличие SSI-директив. Это может применяться различным образом, в частности, для обработки переменных, заданных на странице, включающей эти фрагменты.
  • Обычно, любые файлы в WWW-директории можно включить по SSI-директиве include, поэтому сами фрагменты, могут храниться в файлах с любым расширением. Тем не менее, следует учитывать что, HTM и HTML-файлы индексируются поисковыми системами, а значит, те могут послать посетителя на неполный фрагмент страницы (это, конечно, маловероятно, так как для этого на данный фрагмент должна быть проиндексированная ссылка), что, в свою очередь, может разочаровать его и оттолкнуть от сайта. Избежать такого, досадного, курьеза можно несколькими способами:

Область применения 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 – личное дело каждого.

Включаемый файл foot.htm :

Практическое отличие одной и той же страницы, построенной с применением различных технологий лишь в том, что каждая страница объектов технологии IFRAME выглядит полнее и является вполне самостоятельной. Это несколько увеличивает время загрузки первой страницы, но зато, за счет кэширования, повторяющиеся фрагменты не приходится загружать со следующей страницей и дальнейшая загрузка значительно ускоряется (подробней о преимуществах Frame смотрите в «Если вам не нравятся фреймы, значит вы не умеете их готовить»). Сочетание двух технологий включения дает наиболее качественный результат. Оно применяется на всех профессиональных сайтах и, если Frame и Object могут где-то не встретиться, то, по крайней мере, Script src=… и (то же включение кода, содержащегося в отдельном файле и загружающегося только однажды), используется повсеместно.

Применение IFRAME не может полностью заменить SSI, так как SSI позволяет не только загрузить фрагменты по условию (что можно решить и скриптом), но и, как показано в примере, через переменные передать им любые параметры. Без SSI это можно сделать только методом POST или через HTTP_REFERER (продолжение имени файла, после вопросительного знака), для дальнейшей обработки каким-либо скриптом. Но возможности такой передачи не идут ни в какое сравнение с возможностями передачи значений SSI переменных. Поэтому, применение SSI может потребоваться даже на страницах, основанных на фреймах – чем больше инструментов нам доступно, тем лучше и быстрее получается результат.

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

Какие файлы обрабатываются как SSI, как добавить свои файлы

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

AddHandler server-parsed .ext1

.ext1 тут — расширение файлов, которые должны проверяться на наличие в них SSI. Не рекомендуется добавлять расширения .html и .htm, так как в этом случае сервер будет проверять все html-файлы на предмет наличия SSI-вставок. Это может привести к совершенно бессмысленной нагрузке на сервер.

Ограничения

Пользователям хостинга доступны все директивы SSI за исключением одного ограничения для абонентов, которые используют тариф не предусматривающий запуск собственных cgi-скриптов. Для этих клиентов запуск скриптов недоступен и через SSI-инструкции. То есть, в терминах Apache для них действует опция NoExec.

Как работает и для чего используется SSI

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

Рассмотрим подробнее:

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

    Поместим в файл header.inc «заголовок» веб-страницы (элементы дизайна, меню, нужные ссылки и другие элементы, которые присутствуют на всех страницах), а в файл footer.inc поместим нижнюю часть веб-страницы (завершающую часть дизайна). Далее создадим файл с именем index.shtml, который будет выглядеть так:

    А здесь у нас будет основной текст страницы ;

    Предполагается, что в файлы-включения мы поместили html-код хотя бы вроде начальных/конечных тэгов , , и так далее. В результате пользователь получит страницу, в которую будет сначала включено содержимое файла header.inc , далее слова «А здесь у нас будет основной текст страницы» и затем содержимое файла footer.inc.

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

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

    Например, у вас есть скрипт-счетчик, который показывает сколько посетителей заходило на вашу страницу и находится он по адресу /cgi-bin/count.pl. Включим результат его работы в веб-страницу. Для этого в коде html-страницы разместим такой SSI-код:

    В итоге на странице, которую увидит пользователь, будет размещен счетчик, который вывел скрипт /cgi-bin/count.pl.

    Полный список команд SSI вы найдете в описании Apache-модуля mod_include

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

Инструкции SSI можно использовать не только для запуска скриптов и включения файлов. Также SSI позволяет работать с переменными окружения веб-сервера, производить манипуляции с датами, выполнять команды по условию и так далее. Хорошее описание наиболее востребованных применений команд SSI вы найдете на сервере CIT Forum .

Диагностика ошибок при использовании SSI

Если при использовании SSI-команд на своих html-страницах вы увидели сообщение "", это свидетельствует о возникновении ошибки при обработке SSI-инструкции веб-сервером.

Возможные причины возникновения такой ошибки.

Что такое ssi и с чем его едят?

Server Side Include (SSI) .Эта вещь в WWW-дизайне чрезвычайно нужная и полезная, так как во много раз облегчает работу по созданию и поддержке Web-сайта.

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

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

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

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

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

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

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

К счастью, таких провайдеров не очень много. Большинство предлагают поддержку SSI по умолчанию. Но учтите, что на бесплатных серверах, таких, как Хоом, Tripod, Geocities, Chat.ru SSI не разрешается. Тут уж ничего поделать нельзя:-(

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

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

Что такое SSI и с чем его едят II

Этой статьей хотелось бы открыть новый подраздел на DVK URL CLUB. "Ваша колонка" призвана собрать материалы и мнения наших посетителей. Первая статья написана нашим модератором раздела "Перекур" по мотивам одного из топиков на "Перекуре", в которой Александр поясняет некоторые особеннсти использования директив SSI. Так же автор хочет напомнить вам, что инструкциями SSI можно пользоваться только на том сервере, который их поддерживает. Большинство бесплатных хостингов в сети не выделяется такой особенностью, а попросту, не поддерживают SSI.

Преамбула
Суть и простейшие приемы в SSI уже были описаны на данном сайте. Как правило, на развалах статей по мастерингу редко встречается что-то кроме описание единственной функции "include" в самом простом варианте.

Однако SSI смело можно назвать языком программирования, пусть не полноценным, но языком. SSI позволяет определять условия и переменные, а также умеет работать с так называемыми переменными окружения, одной из которых является $QUERY_STRING, активно использующаяся при программировании на Perl, PHP, и других языках создания серверных скриптов. Здесь-то и начинается самое интересное.

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

Технология: Условные директивы и переменная окружения $QUERY_STRING.
Вобщем, есть какой-то шаблон index.shtml, который представляет из себя следующее:

:: Титул, блин::



... Крутые теги и крутая графика...

Тут, в принципе, проблем с пониманием не должно возникать, а вот далее - самое интересное. Поясню, что значение переменной $QUERY_STRING определяется содержимым строки запроса после знака "?", т.е. http://maste.ru/razdel/index.shtml?page1.
вторая и ключевая часть:



Я думаю, что нужна расшифровка. Мы имеем пять директив, из которых три относятся к условным, а две - обычные инклюдсы:
Проверяется содержимое строки запроса на предмет наличия конструкции "?something" и в случае положительного результата выполняется вторая директива.
Подключается файл с именем, идентичным содержимому строки, допустим, если строка запроса выглядит так: "http://maste.ru/razdel/index.shtml?page1", то подключается файл "page1.txt", лежащий в одной директории с индексным файлом.
Исполняется в том случае, если содержимого вида "?something" в строке нет, а URL выглядит так: "http://maste.ru/razdel/index.shtml" или так: "http://maste.ru/razdel/", и преходит к исполнению четвертой директивы.
Подключается файл по умолчанию, содержащий, как правило, оглавление раздела, т.е. ссылки на файлы раздела, которые должны выглядеть так: ссылка на страницу №1 и т.д.
Завершение условия.
Далее пойдет кол нижней части html-кода:
... еще немного Крутых тегов и крутой графики...


Как это будет работать?
В папку сваливаются файлы:
index.shtml (типа терминал);
default.txt (список ссылок страница 1 и тэ дэ и тэ пэ и хэтэтэпэ:);
файлы page1.txt, ..., page571756.txt пока не надоест, (в принципе название может быть любым, главное чтобы оно совпадало с содержимым после "?" в соответствующей ссылке).
Если предполагается использование директив SSI внутри рядовых файлов, то лучше их сделать так же.shtm, .shtml, и не забыть поправить разширения в коде файла index.shtml.

Вот! Юзайте на здоровье:)




Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: