Директивы SSI



Влад Мержевич

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

Все директивы записываются в следующем виде.

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

Каждая директива начинается с ключевого набора <!--#, пробелы между символами не допускаются. После символа решетки идёт указание директивы, а возможные параметры указываются через пробел.

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

Директива config

Позволяет управлять некоторыми опциями SSI, такими как настройка формата вывода даты, времени, размера файла и установка текста сообщения об ошибке.

Параметр errmsg

errmsg устанавливает сообщение, отображаемое при возникновении ошибок. По умолчанию выводится текст [an error occurred while processing this directive], но вы можете поменять его на свой, да ещё написав по-русски. Синтаксис следующий.

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

Параметр timefmt

Параметр timefmt устанавливает формат даты и времени для директивы flastmod. Синтаксис следующий.

<!--#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).
  • %% — вывод символа %.

Разрешается совмещать между собой любые шаблоны, а также писать дополнительные символы. В примере 1 показано использование параметра timefmt.

Пример 1. Вывод даты и времени модификации файла

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>SSI</title>
 </head>
 <body> 
  <!--#config timefmt="Дата: %d-%m-%y, время: %T"-->
  <!--#flastmod file="gtm.css"-->    
 </body>
</html>

В результате данного примера получим строку вида «Дата: 04-07-97, время: 19:24:08».

Параметр sizefmt

Параметр sizefmt определяет формат вывода размера файла. Синтаксис следующий.

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

Значение bytes отображает размер файла в байтах (3,152), abbrev - в килобайтах (3k) или мегабайтах (6,1M), в зависимости от объёма документа. В примере 2 показано использование параметра sizefmt.

Пример 2. Формат вывода размера файла

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>SSI</title>
 </head>
 <body> 
  <!--#config sizefmt="abbrev"-->
  <p>Объем файла musa.mp3 - <!--#fsize file="musa.mp3"--></p>
 </body>
</html>

Директива include

Директива include вставляет содержимое другого файла в текущий документ. Файл обязательно должен быть доступен, иначе он не будет показан. У директивы include имеется два параметра: file и virtual.

Параметр file

Указывает путь к файлу относительно текущего документа. Можно использовать как текстовые файлы, так и HTML-документы, а также включать другие SSI-файлы (обычно с расширением .shtml). Синтаксис использования следующий.

<!--#include file="URL"-->

Параметр virtual

Задает виртуальный путь к документу на сервере. Синтаксис следующий.

<!--#include virtual="URL" -->

Между параметрами file и virtual есть определенная разница. Если вы применяете путь к документам относительно корня сайта (такой путь характеризуется слешем вначале, например /file.html), то следует использовать параметр virtual. При указании относительного пути, следует воспользоваться параметром file (пример 3).

Пример 3. Путь к файлу

<!DOCTYPE html>
 <html>
  <head>
   <meta charset="utf-8">
   <title>SSI</title>
  </head>
 <body> 
  <!--#include virtual="/inc/header.html"-->
  <p>...</p>
  <!--#include file="../inc/footer.html"-->    
 </body>
</html>

Директива echo

Директива echo предназначена для вывода значений переменных и даты, формат которой определяется параметром timefmt директивы config. У echo единственный параметр var, он определяет выводимое значение.

<!--#echo var="значение для вывода"-->

В примере 4 показано использование директивы echo для вывода переменной окружения. Об этих переменных пойдёт речь далее.

Пример 4. Вывод значения переменной окружения

<!DOCTYPE html>
 <html>
  <head>
   <meta charset="utf-8">
   <title>SSI</title>
  </head>
 <body> 
  <p><!--#echo var="HTTP_USER_AGENT"--></p>
 </body>
</html>

Директива fsize

Директива fsize отображает размер определённого файла. Формат вывода задаётся с помощью параметра sizefmt директивы config. Синтаксис использования следующий.

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

Путь к файлу определяется с помощью параметров file или virtual, которые имеют те же функции, что и для директивы include.

Директива flastmod

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

<!--#flastmod file="URL" | virtual="URL"-->

Путь к файлу определяется с помощью параметров file или virtual, которые имеют те же функции, что и для директивы include.

Директива exec

Директива exec вставляет результат выполнения команды или CGI-программы в HTML-документ. Эта директива включает два параметра: cmd и cgi.

Параметр cmd

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

<!--#exec cmd="команда"-->

Например, строка <!--#exec cmd="/usr/bin/date" --> исполняет Unix-команду date.

Параметр cgi

Выполняет CGI-программу и результат её выполнения вставляет в указанное место. В качестве параметра указывается адрес программы.

<!--#exec cgi="URL"-->

В примере 5 показано одно из применений параметра cgi.

Пример 5. Использование директивы exec

<!DOCTYPE html>
 <html>
  <head>
   <meta charset="utf-8">
   <title>SSI</title>
  </head>
 <body> 
  <p>Всего прочитало эту страницу <!--#exec cgi="/counter.pl"--> 
  человек.</p>    
 </body>
</html>

В данном примере запускается программа counter.pl, написанная на Perl, которая подсчитывает число посетителей данной страницы и записывает его в файл или в базу данных. После этого результат отображается в месте, где стоит строка <!--#exec cgi="/counter.pl"-->.

Не выкладывайте свой код напрямую в комментариях, он отображается некорректно. Воспользуйтесь сервисом cssdeck.com или jsfiddle.net, сохраните код и в комментариях дайте на него ссылку. Так и результат сразу увидят.