SSI

SSI (Server Side Include) — это набор команд, позволяющий включить в страницу различную информацию.  Эта технология позволяет включать в страницы динамические элементы, не прибегая к скриптовым языка. В полной мере SSI поддерживают Apache и nginx, усечённо — IIS.  В наше время актуальность этой технологии уменьшилась, всё то же самое можно сделать на php, но бывают ситуации, когда использовать php невозможно или нежелательно.

Директива SSI имеет вид:

<!--#директива параметр="значение"-->

Пробелы между символами <!—# недопустимы. В случае, если директива не будет обработана сервером, браузер её не отобразит. По умолчанию директивы SSI обрабатываются только в файлах с расширением .shtml, но с помощью настроек сервера можно использовать SSI и в файлах с любыми другими расширениями.

Самой важной директивой SSI является директива include

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

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

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

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

 

Директива exec позволяет исполнить внешнюю программу и её вывод поместить в документ на место директивы. Хостинг-провайдеры могут запрещать эту директиву в соответствии с условиями оказания услуг или тарифных планов.

<!--#exec cmd="/путь/команда"-->
<!--#exec cgi="URL"-->

Директива fsize отображает размер определённого файла.

<!--#fsize file="file"-->
<!--#fsize virtual="file"-->

Директива flastmod отображает дату последней модификации указанного файла. Формат даты устанавливается через директиву config и параметр timefmt.

<!--#flastmod file="file.html"-->
<!--#flastmod virtual="file.html"-->

Время изменения текущего файла можно показать из переменной окружения LAST_MODIFIED:

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

Для настроек SSI используется команда config:

<!--#config errmsg="Сообщение об ошибке"-->

При невозможности исполнить директиву SSI вместо стандартного сообщения [an error occurred while processing this directive] будет выведено указанное в параметре errmsg.

<!--#config sizefmt="bytes"-->
<!--#config sizefmt="abbrev"-->

Устанавливает вывод размера файла в байтах или килобайтах/мегабайтах

Параметр timefmt устанавливает формат даты и времени.

<!--#config timefmt="формат"-->

Для контроля выводимой информации могут применяться следующие шаблоны.

%a — сокращенное название дня недели.
%A — полное название дня недели.
%b — сокращенное название месяца.
%B — полное название месяца.
%c — формат даты и времени по умолчанию.
%d — день месяца (от 01 до 31).
%D — дата в формате мм/дд/гг.
%e — день месяца без ведущего нуля (от 1 до 31).
%H — часы в 24-часовом формате (от 00 до 23).
%I — часы в 12-часовом формате (от 00 до 12).
%j — день года (от 001 до 366).
%m — номер месяца (от 01 до 12).
%M — минуты (от 00 до 60).
%p — выводит AM или PM в зависимости от времени и заданного формата.
%r — время с автоматическим добавлением AM или PM.
%T — время в формате чч:мм:сс.
%y — год (от 00 до 99).
%% — вывод символа %.

 

Директива printenv выводит все переменные окружения. Параметров не имеет.

<!--#printenv -->

 

Директива if/else применяется для управления выводом страницы по условию.

 <!--#if expr="УСЛОВИЕ1" -->
 HTML-код, который будет выводиться, если УСЛОВИЕ1 истинно
 <--#elif expr="УСЛОВИЕ2" -->
 HTML-код, который будет выводиться, если УСЛОВИЕ1 ложно, а УСЛОВИЕ2 истинно
 <--#else -->
 HTML-код, который будет выводиться, если все условия ложны
 <--#endif -->

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