Номер телефона

Последнее обновление:

Руководство по технологиии 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]

[Дата в формате
%Y-%m-%d]

2017-06-22

Под Windows — пусто.

[%g]

[Год в формате ГГ]

17

Под Windows — пусто.

[%G]

[Год в формате ГГГГ]

2017

Под Windows — пусто.

[%h]

[Аббревиатура названия месяца]

Jun

Под Unix — то же, что и %b;
под Windows — пусто.

%H

Часы в 24-часовом формате

11

С некоторых пор на моём сервере время по умолчанию почему-то установили в GMT (по Гринвичу). Так что нормальное российское время через мои SSI установить, увы, невозможно.

[%i]

[Вывод символа i]

i

Под Windows — пусто.

%I

Часы в 12-часовом формате

11

%j

День года

173

Под Unix нумерация с 1,
под Windows — с 0.

[%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
(номера с понедельника по субботу совпадают с %w)
Под Windows — пусто.

%U

Неделя года (первый день недели — воскресенье)

25

[%v]

[Дата в формате "%e-%b-%Y"]

22-Jun-2017

Под Windows — пусто.

[%V]

[?]

25

%w

Номер дня недели

4

С воскресенья по субботу, 0–6
(номера с понедельника по субботу совпадают с %u)

%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


Пожалуйста, не забудьте ознакомиться с правилами оставления комментариев.



Подписаться на комментарии на этой странице

Мы можем выполнить

Другие услуги
Интересная и полезная
информация
НАПИШИТЕ НАМ
Яндекс.Метрика
Номер телефона
© Copyright Все права защищены 2013-2024 Научный консалтинг