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