Последнее обновление:
Руководство по технологиии SSI
Часть 4
SSI - это Server Side Includes (технология динамической сборки сайта из его отдельных частей)
ДИРЕКТИВЫ
Директивы по алфавиту вместе с атрибутами. Одни и те же атрибуты могут использоваться с разными директивами. Поиск по атрибутам — на странице «Атрибуты».
ПРИМЕЧАНИЕ
Здесь не затронуты директивы, относящиеся к спецификации SSI+.
#break
Останавливает вывод документа.
Атрибутов нет
ПРИМЕР
<p>Эта строка будет напечатана.</p> <!--#break --> <p>Эта строка не будет напечатана, потому что документ обрезан и связь с клиентом прервана.</p> |
ПРИМЕЧАНИЕ
Работает не на всех серверах.
#config
Управляет следующимими опциями SSI: установка текста сообщения об ошибке, настройка формата вывода размера файла и даты/времени. Сама директива ничего не выводит, лишь даёт указания, которые используют другие директивы.
Атрибуты: errmsg, sizefmt, timefmt, cmdecho, cmdprefix, cmdpostfix
errmsg — устанавливает любой текст сообщения об ошибке вместо стандартного [an error occurred while processing this directive].
ПРИМЕЧАНИЕ
Инструкция #config errmsg должна быть помещена на основной странице документа. Находясь во вложенной странице, она не срабатывает. Так что задать её один раз на весь сайт не получится.
ПРИМЕР
<!--#config errmsg = "[Пользовательское сообщение об ошибке]" -->
Результат (задана заведомо не существующая директива)
[Пользовательское сообщение об ошибке]
sizefmt — определяет формат вывода размера файла:
<!--#config sizefmt = "bytes" --> — в байтах;
<!--#config sizefmt = "abbrev" --> — в килобайтах.
timefmt — определяет формат вывода даты и времени. Для этого существует ряд шаблонов (красным помечены шаблоны, зависимые от настроек сервера или ОС, в [квадратных скобках] — неописанные шаблоны, найденные эмпирически).
Большинство серверов работают под UNIX. Но встречаются и под Windows.
Формат |
Описание |
Результат |
Примечания |
%a |
Краткое название дня недели |
Thu |
|
%A |
Полное название дня недели |
Thursday |
|
%b |
Аббревиатура названия месяца |
Jun |
В трёхбуквенном мае полное и краткое назваеия совпадают. |
%B |
Полное название месяца |
June |
|
%c |
формат даты и времени по умолчанию ("%x %X") |
Thu Jun 22 11:00:16 2017 |
На сервере данного сайта выводится как "%a %b %d %X %Y" |
[%C] |
[?] |
20 |
Непонятное значение, для чего оно?... |
%d |
День месяца |
22 |
от 01 до 31 |
%D |
Дата в формате "%m/%d/%y" |
06/22/17 |
|
%e |
День месяца |
22 |
от 1 до 31 |
[%E] |
[Вывод символа E] |
E |
Под Windows — пусто. |
[%f] |
[Вывод символа f] |
f |
Под Windows — пусто. |
[%F] |
[Дата в формате |
2017-06-22 |
Под Windows — пусто. |
[%g] |
[Год в формате ГГ] |
17 |
Под Windows — пусто. |
[%G] |
[Год в формате ГГГГ] |
2017 |
Под Windows — пусто. |
[%h] |
[Аббревиатура названия месяца] |
Jun |
Под Unix — то же, что и %b; |
%H |
Часы в 24-часовом формате |
11 |
С некоторых пор на моём сервере время по умолчанию почему-то установили в GMT (по Гринвичу). Так что нормальное российское время через мои SSI установить, увы, невозможно. |
[%i] |
[Вывод символа i] |
i |
Под Windows — пусто. |
%I |
Часы в 12-часовом формате |
11 |
|
%j |
День года |
173 |
Под Unix нумерация с 1, |
[%J] |
[Вывод символа J] |
J |
Под Windows — пусто. |
[%k] |
[Часы в 24-часовом формате (то же, что и %H)] |
11 |
Под Windows — пусто. |
[%K] |
[Вывод символа K] |
K |
Под Windows — пусто. |
[%l] |
[[Часы в 12-часовом формате (то же, что и %I)] |
11 |
Под Windows — пусто. |
[%L] |
[Вывод символа L] |
L |
Под Windows — пусто. |
%m |
Номер месяца |
06 |
|
%M |
Минуты |
00 |
|
%n |
Вставка символа новой строки |
|
|
[%N] |
[Вывод символа N] |
N |
Под Windows — пусто. |
[%o] |
[Вывод символа o] |
o |
Под Windows — пусто. |
[%O] |
[Вывод символа O] |
O |
Под Windows — пусто. |
%p |
AM/PM (до полудня/после) |
AM |
|
[%P] |
[Вывод символа P] |
P |
Под Windows — пусто. |
[%q] |
[Вывод символа q] |
q |
Под Windows — пусто. |
[%Q] |
[Вывод символа Q] |
Q |
Под Windows — пусто. |
%r |
Время в формате "%I:%M:%S %p" |
11:00:16 AM |
|
%R |
Время в формате "%H:%M" |
11:00 |
|
%s |
Время в секундах с 01.01.1970 |
1498129216 |
Под Windows — пусто. |
%S |
Секунды |
16 |
|
%t |
Вставка символа табуляции |
|
|
%T |
Время в формате "%H:%M:%S" |
11:00:16 |
|
[%u] |
[Номер дня недели] |
4 |
С понедельника по воскресенье, 1–7 |
%U |
Неделя года (первый день недели — воскресенье) |
25 |
|
[%v] |
[Дата в формате "%e-%b-%Y"] |
22-Jun-2017 |
Под Windows — пусто. |
[%V] |
[?] |
25 |
|
%w |
Номер дня недели |
4 |
С воскресенья по субботу, 0–6 |
%W |
Неделя года (первый день недели — понедельник) |
25 |
|
%x |
формат даты по умолчанию |
06/22/17 |
|
%X |
формат времени по умолчанию |
11:00:16 |
|
%y |
Год в формате ГГ |
17 |
|
%Y |
Год в формате ГГГГ |
2017 |
|
[%z] |
[Временная зона (поправка к GMT)] |
+0000 |
|
%Z |
Временная зона (название) |
UTC |
Под Windows этот и предыдущий |
%% |
Ввод символа % |
% |
|
Можно комбинировать шаблоны друг с другом и с любыми прочими символами.
ПРИМЕР
<!--#config timefmt = "%d.%m.%Y, %H:%M" --> <p>Последнее обновление страницы: <!--#flastmod file = "file.html" --></p> |
Формат вывода:
Последнее обновление страницы: 26.09.2021, 11:06
cmdecho — определяет выходные параметры команды, выполненной директивой #exec cmd.
Формат:
<!--#config cmdecho = "onoroff" -->
onoroff — ON или OFF. Если команда директивы #exec cmd возвращает данные, которые можно вывести через #echo, они выводятся при значении ON и игнорируются при значении OFF.
По умолчанию — OFF.
Формат выводимых данных зависит от наличия или отсутствия директив #config cmdprefix и #config cmdpostfix.
При отсутствии этих директив данные выводятся без форматирования и интерпретации специальных символов. При их наличии вывод будет отформатирован и интерпретирован в соответствии с их значениями.
cmdprefix — используется для установки текста, начинающего каждую строку, выводимую каждой следующей инструкцией #exec cmd.
Формат:
<!--#config cmdprefix = "строка" -->
строка — любой символ и/или тэг HTML.
cmdpostfix — используется для установки текста, завершающего каждую строку, выводимую каждой следующей инструкцией #exec cmd.
Формат:
<!--#config cmdpostfix = "строка" -->
строка — любой символ и/или тэг HTML.
#echo
Выводит значения переменных или даты, отформатированной в инструкции #config timefmt.
Атрибуты: encoding, var
encoding — необязательный атрибут, определяет интерпретацию текста браузером. Имеет 3 значения: entity (по умолчанию), url и none.
- entity — по умолчанию. В этом случае происходит замена символов языка HTML на спецсимволы для вывода их на страницу;
- url — произодится так называемое escape-преобразование, т.е. все символы приобретут вид %nn (nn — код символа в 16-ричной кодировке), что позволит их применять в строке URL;
- none — не будет никаких преобразований, т.е. тэги HTML, которые раньше заменялись на спецсимволы, теперь заменяться не будут, и в переменные SSI можно вставлять код HTML. А вот спецсимволы будут заменяться на тэги.
Атрибут encoding всегда ставится перед атрибутом var.
ПРИМЕР
<!--#set var = "string1" value = "Тестируем <p>тэги</p> <q>HTML</q>" --> <p>По умолчанию:<br><!--#echo var = "string1" --></p> <p>Значение none:<br><!--#echo encoding = "none" var = "string1" --></p> <p>Значение url:<br><!--#echo encoding = "url" var = "string1" --></p>
Результат
По умолчанию:
Тестируем <p>тэги</p> <q>HTML</q>
Значение none:
Тестируем тэги HTML
var — определяет имя переменной, значение которой надо вывести.
ПРИМЕРЫ
Вывод текущего времени в формате «чч:мм:сс»
<!--#config timefmt = "%T" --> <p>Текущее время: <!--#echo var = "DATE_LOCAL" --></p> |
Результат
Текущее время: 11:00:16
Вывод значения переменной окружения HTTP_USER_AGENT
<p><!--#echo var = "HTTP_USER_AGENT" --></p> |
Результат
ia_archiver
#exec
Запускает внешние программы и скрипты CGI.
Атрибуты: cmd, cgi
cmd — задаёт параметры для выполнения программ, выполняемых UNIX shell.
Формат:
<!--#exec cmd = "имя_программы список_аргументов" --> |
имя_программы — полное имя исполняемой программы или команды;
список_аргументов — список аргументов, посылаемых исполняемой программе.
На сервере должны быть заданы пути к исполняемой программе в переменной окружения PATH.
При отсутствии пути программу можно запустить, используя shell или скрипт CGI.
Стандартный вывод программы направляется в документ HTML. Вывод может быть модифицирован директивой #config cmdecho.
ПРИМЕЧАНИЕ
Под Win32 и под UNIX с использованием suExec в директиве #exec cmd нельзя передавать аргументы команды или иным образом включать пробелы в значении cmd. Следующий пример будет работать только под UNIX конфигурации non-suExec, но не сработает ни под Win32, ни при выполнении suExec:
<!--#exec cmd="perl /cgi-bin/counter/counter.pl page4" -->
Вместо этого следует применить другую директиву:
<!--#include virtual="/cgi-bin/counter/counter.pl?page4" -->
В любом случае: если можно обойтись директивой #include, то лучше применять её вместо #exec.
cgi — вызывает скрипт CGI. Вызываемый скрипт должен находится в директории cgi-bin или иметь расширение .cgi. Формат:
<!--#exec cgi = "имя_скрипта" --> |
имя_скрипта — полное имя скрипта CGI.
Вывод скрипта подставляется в документ.
#flastmod
Отображает дату последнго обновления указанного файла (формат даты можно установить директивой config).
Атрибуты: file, virtual
file — указывает путь к файлу относительно текущего документа. Можно использовать как текстовые файлы, так и HTML-документа, а также включать другие SSI-файлы (обычно с расширением shtml) — но только те, которые находятся в той же папке, что и данная страница.
virtual — задает виртуальный путь к документу на сервере. Начинается со слэша.
/file.html — находится в корневой папке.
/subdir/file.html — находится в папке subdir, вложенной в корневую.
ПРИМЕР
<!--#config timefmt = "%d.%m.%Y, %H:%M" --> <p>Последнее обновление страницы: <!--#flastmod file = "file.html" --></p> |
Результат
Последнее обновление страницы: 11.11.2021, 11:06
#fsize
Отображает размер определённого файла (формат вывода размера файла можно определить директивой #config).
Атрибуты: file, virtual
file — указывает путь к файлу относительно текущего документа.
virtual — задает виртуальный путь к документу на сервере.
(Подробнее об этих атрибутах см. #flastmod).
ПРИМЕРЫ
Определяем размер данного файла в байтах (через атрибут file).
Не путайте точки и запятые.
<!--#config sizefmt = "bytes" --> <p><!--#fsize file = "file.html" --></p> |
Результат
45,076
Определяем размер главной страницы в байтах (через атрибут file).
<!--#config sizefmt = "bytes" --> <p><!--#fsize file ="index.html" --></p> |
Результат
5,134
Определяем размер главной страницы сайта в килобайтах (через атрибут virtual).
<!--#config sizefmt = "abbrev" --> <p><!--#fsize virtual = "/index.html" --></p> |
Результат
8k
Определяем размер главной страницы в килобайтах (через атрибут virtual).
<!--#config sizefmt = "abbrev" --> <p><!--#fsize virtual = "/index.html" --></p> |
Результат
5k
#goto
Оператор перехода на метку.
Атрибутов нет, вместо атрибута используется значение
метка — имя метки, определяемое директивой #label.
ПРИМЕР
<!--#goto = "testlabel" --> <p>Эта строка не выводится.</p> <!--#label = "testlabel" --> <p>Эта строка выводится.</p> |
Работает не на всех серверах.
#include
Директива include — одна из наиболее используемых. У некоторых этой директивой ограничивается всё представление об SSI.
Вставляет содержимое другого файла в текущий документ. К файлу обязательно должен быть открыт доступ, иначе он не будет показан.
Можно включать файлы с расширением .txt, .htm, .html, .shtml. Для основного файла — «приёмника» включений — предусмотрено специальное расширение .shtml, но это не обязательно и зависит от настроек сервера, которыми можно управлять в файле .htaccess (см. «Настройка сервера»).
Атрибуты: file, virtual
file — указывает путь к файлу относительно текущего документа.
virtual — задает виртуальный путь к документу на сервере.
(Подробнее об этих атрибутах см. #fsize).
ПРИМЕР
<!--#include file = "top1.html" --> |
Результат можно увидеть в «шапке» этой страницы и других, ей подобных.
#label
Устанавливает метку в документе, которая используется директивой #goto.
Атрибутов нет, вместо атрибута используется значение
ПРИМЕР
<!--#goto = "testlabel" --> <p>Эта строка не выводится.</p> <!--#label = "testlabel" --> <p>Эта строка выводится.</p> |
Работает не на всех серверах.
#printenv
Выводит имена и значения всех переменных окружения, определённых на данном сервере.
Атрибутов нет
ПРИМЕР
Выводим список всех переменных окружения
Результат
DOCUMENT_ROOT=/www/site.ru/www/htdocs/ HTTP_CONNECTION=close HTTP_FROM=crawler@alexa.com HTTP_HOST=site.ru HTTP_SERVER_ADDR=9.31.47.2 HTTP_USER_AGENT=ia_archiver HTTP_X_REAL_IP=54.173.35.129 PATH=/sbin:/bin:/usr/sbin:/usr/bin REMOTE_ADDR=54.173.35.129 REMOTE_PORT=40493 SCRIPT_FILENAME=/www/site.ru/www/htdocs/file.html SCRIPT_URI=http://site.ru/file.html SCRIPT_URL=/file.html SERVER_ADDR=127.0.0.1 SERVER_ADMIN=support@hc.ru SERVER_NAME=site.ru SERVER_PORT=80 SERVER_SIGNATURE=<ADDRESS>Apache/1.3.42 Server at site.ru Port 80</ADDRESS> SERVER_SOFTWARE=Apache/1.3.42 (Unix) GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.0 REQUEST_METHOD=GET QUERY_STRING= REQUEST_URI=/file.html SCRIPT_NAME=/file.html DATE_LOCAL=22.06.2021, 11:00 DATE_GMT=22.06.2021, 11:00 LAST_MODIFIED=26.09.2014, 11:06 DOCUMENT_URI=/file.html DOCUMENT_PATH_INFO= USER_NAME=site.ru DOCUMENT_NAME=file.html TIME_FMT=% string1=Тестируем <b>тэги</b> <i>HTML</i>
Кроме вывода этого огромного списка, директива #printenv ничего делать не умеет.
Чтобы вывести значения отдельных переменных окружения, нужно использовать #echo var.
Выведем разные варианты адреса этой страницы
<p><!--#echo var = "SCRIPT_FILENAME" --></p> <p><!--#echo var = "SCRIPT_URI" --></p> <p><!--#echo var = "SCRIPT_URL" --></p> |
Результат
/www/site.ru/www/htdocs/file.html
http://site.ru/file.html
/file.html
Если заданная переменная не определена на данном сервере, выводится (none).
#set
Устанавливает значение переменной
Атрибуты: var, value (используются вместе)
var — определяет имя переменной;
value — определяет значение переменной.
ПРИМЕР
<!--#set var = "test1" value = "Тестируем директиву #set" --> <p><!--#echo var = "test1" --></p> |
Результат
Тестируем директиву #set
Вся технология SSI: Часть 1, Часть 3, Часть 4, Часть 5