√лаза страшат, а руки делают

ƒ»–≈ “»¬џ


ƒирективы по алфавиту вместе с атрибутами. ќдни и те же атрибуты могут использоватьс€ с разными директивами. ѕоиск по атрибутам — на странице Ђјтрибутыї.

ѕ–»ћ≈„јЌ»≈

«десь не затронуты директивы, относ€щиес€ к спецификации 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" --> — в килобайтах.

 

ѕ–»ћ≈„јЌ»≈

–усскому человеку может показатьс€, что bytes тоже задаЄт размер в килобайтах, только с меньшим округлением. я тоже на это попалс€ (минут 20 гуглил справочники, пока не дошло до идиота). ¬спомним, что Ђу них тамї дес€тичным разделителем служит точка, а зап€та€ (котора€ выводитс€ при использовании bytes) поразр€дно раздел€ет тыс€чи.

timefmt — определ€ет формат вывода даты и времени. ƒл€ этого существует р€д шаблонов (красным помечены шаблоны, зависимые от настроек сервера или ќ—, в [квадратных скобках] — неописанные шаблоны, найденные мною эмпирически).

ѕ–»ћ≈„јЌ»≈

Ѕольшинство серверов работают под UNIX. Ќо встречаютс€ и под Windows. ћой сайт находитс€ на нормальном UNIXТовом сервере, а дл€ предварительных прогонов и тестов € пользуюсь виртуальным сервером, установленным на моЄм компьютере под Windows.

‘ормат

ќписание

–езультат

ѕримечани€

%a

 раткое название дн€ недели

–Т—Б

 

%A

ѕолное название дн€ недели

–Т–Њ—Б–Ї—А–µ—Б–µ–љ—М–µ

 

%b

јббревиатура названи€ мес€ца

–Є—О–ї

¬ трЄхбуквенном мае полное и краткое назваеи€ совпадают.

%B

ѕолное название мес€ца

–Ш—О–ї—М

%c

формат даты и времени по умолчанию ("%x %X")

–Т—Б 25 –Є—О–ї 2021 11:49:07

Ќа сервере данного сайта выводитс€ как "%a %b %d %X %Y"

[%C]

[?]

20

ЌашЄл методом тыка,
значени€ пока не пон€л.

%d

ƒень мес€ца

25

от 01 до 31
(с предвар€ющим нулЄм)

%D

ƒата в формате "%m/%d/%y"

07/25/21

 

%e

ƒень мес€ца

25

от 1 до 31
(без предвар€ющего нул€)

[%E]

[¬ывод символа E]

%E

ѕод Windows — пусто.

[%f]

[¬ывод символа f]

%f

ѕод Windows — пусто.

[%F]

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

2021-07-25

ѕод Windows — пусто.

[%g]

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

21

ѕод Windows — пусто.

[%G]

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

2021

ѕод Windows — пусто.

[%h]

[јббревиатура названи€ мес€ца]

–Є—О–ї

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

%H

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

11

— некоторых пор на моЄм сервере врем€ по умолчанию почему-то установили в GMT (по √ринвичу). “ак что нормальное российское врем€ через мои SSI установить, увы, невозможно.

[%i]

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

%i

ѕод Windows — пусто.

%I

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

11

 

%j

ƒень года

206

ѕод 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

Ќомер мес€ца

07

 

%M

ћинуты

49

 

%n

¬ставка символа новой строки

 

[%N]

[¬ывод символа N]

%N

ѕод Windows — пусто.

[%o]

[¬ывод символа o]

%o

ѕод Windows — пусто.

[%O]

[¬ывод символа O]

%O

ѕод Windows — пусто.

%p

AM/PM (до полудн€/после)

 

[%P]

[¬ывод символа P]

ѕод Windows — пусто.

[%q]

[¬ывод символа q]

%q

ѕод Windows — пусто.

[%Q]

[¬ывод символа Q]

%Q

ѕод Windows — пусто.

%r

¬рем€ в формате "%I:%M:%S %p"

11:49:07

 

%R

¬рем€ в формате "%H:%M"

11:49

 

%s

¬рем€ в секундах с 01.01.1970

1627202947

ѕод Windows — пусто.

%S

—екунды

07

 

%t

¬ставка символа табул€ции

 

%T

¬рем€ в формате "%H:%M:%S"

11:49:07

 

[%u]

[Ќомер дн€ недели]

7

— понедельника по воскресенье, 1Ц7
(номера с понедельника по субботу совпадают с %w)
ѕод Windows — пусто.

%U

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

30

 

[%v]

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

%v

ѕод Windows — пусто.

[%V]

[?]

29

ЌашЄл методом тыка,
значени€ пока не пон€л.

%w

Ќомер дн€ недели

0

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

%W

Ќедел€ года (первый день недели — понедельник)

29

 

%x

формат даты по умолчанию

25.07.2021

 

%X

формат времени по умолчанию

11:49:07

 

%y

√од в формате √√

21

 

%Y

√од в формате √√√√

2021

 

[%z]

[¬ременна€ зона (поправка к GMT)]

+0300

ЌашЄл методом тыка.

»звините за нули, но Ђшл€па слетелаї не у мен€, а у сервера

%Z

¬ременна€ зона (название)

MSK

ѕод Windows этот и предыдущий
шаблон показывают одинаковое значение в формате
"ћосковское врем€ (зима)"

%%

¬вод символа %

%

 

ћожно комбинировать шаблоны друг с другом и с любыми прочими символами.

ѕ–»ћ≈–

<!--#config timefmt = "%d.%m.%Y, %H:%M" -->
<p>ѕоследнее обновление страницы: <!--#flastmod file = "ssi2_1.html" --></p>

‘ормат вывода:

ѕоследнее обновление страницы: 17.11.2017, 06:20

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 = "“естируем <b>тэги</b> <i>HTML</i>" -->
<p>ѕо умолчанию:<br><!--#echo var = "string1" --></p>
<p>«начение none:<br><!--#echo encoding = "none" var = "string1" --></p>
<p>«начение url:<br><!--#echo encoding = "url" var = "string1" --></p>

–езультат

ѕо умолчанию:
“естируем <b>тэги</b> <i>HTML</i>

«начение none:
“естируем тэги HTML

«начение url:
%d2%e5%f1%f2%e8%f0%f3%e5%ec%20%3cb%3e%f2%fd%e3%e8%3c/b%3e%20%3ci%3eHTML%3c/i%3e


var — определ€ет им€ переменной, значение которой надо вывести.

ѕ–»ћ≈–џ

¬ывод текущего времени в формате «чч:мм:сс»

<!--#config timefmt = "%T" -->
<p>“екущее врем€: <!--#echo var = "DATE_LOCAL" --></p>

–езультат

“екущее врем€: 11:49:07

¬ывод значени€ переменной окружени€ HTTP_USER_AGENT

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

–езультат

CCBot/2.0 (https://commoncrawl.org/faq/)

#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 = "ssi2_1.html" --></p>

–езультат

ѕоследнее обновление страницы: 17.11.2017, 06:20

#fsize

ќтображает размер определЄнного файла (формат вывода размера файла можно определить директивой #config).

јтрибуты: file, virtual

file — указывает путь к файлу относительно текущего документа.

virtual — задает виртуальный путь к документу на сервере.

(ѕодробнее об этих атрибутах см. #flastmod).

ѕ–»ћ≈–џ

ќпредел€ем размер данного файла в байтах (через атрибут file).

ѕ–»ћ≈„јЌ»≈

Ќе путайте Ђимпортныеї точки и зап€тые.

<!--#config sizefmt = "bytes" -->
<p><!--#fsize file = "ssi2_1.html" --></p>

–езультат

45,076

ќпредел€ем размер главной страницы Ђћастерской —амоделкинаї в байтах (через атрибут file).

<!--#config sizefmt = "bytes" -->
<p><!--#fsize fil e ="index.html" --></p>

–езультат

5,134

ќпредел€ем размер главной страницы сайта в килобайтах (через атрибут virtual).

<!--#config sizefmt = "abbrev" -->
<p><!--#fsize virtual = "/index.html" --></p>

–езультат

8.4K

ќпредел€ем размер главной страницы Ђћастерской —амоделкинаї в килобайтах (через атрибут virtual).

<!--#config sizefmt = "abbrev" -->
<p><!--#fsize virtual = "/samodel/index.html" --></p>

–езультат

5.0K

#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

¬ыводит имена и значени€ всех переменных окружени€, определЄнных на данном сервере.

јтрибутов нет

ѕ–»ћ≈–

¬ыводим список всех переменных окружени€

ѕ–»ћ≈„јЌ»≈

„тобы было Ђчитабельнееї, лучше это сделать в тэге <pre>, а чтобы при этом не порушить дизайн, назначить ему в CSS приемлемую ширину и задать прокрутку. ѕоскольку список очень длинный, имеет смысл ограничить и высоту контейнера (с соответствующей прокруткой).

<pre style="width: 610px; height: 300px; overflow: scroll;">
<!--#printenv -->
</pre>

–езультат

HTTP_HOST=froland.ru
HTTP_X_FORWARDED_FOR=35.175.191.36, 35.175.191.36
HTTP_X_FORWARDED_PROTO=http
HTTP_X_REQUEST_SCHEME=http
HTTP_CONNECTION=close
HTTP_USER_AGENT=CCBot/2.0 (https://commoncrawl.org/faq/)
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5
HTTP_IF_MODIFIED_SINCE=Wed, 16 Jun 2021 19:34:27 GMT
HTTP_ACCEPT_ENCODING=br,gzip
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
SERVER_SIGNATURE=<address>Apache/2.4.41 (Ubuntu) PHP/5.3.29 mod_fcgid/2.3.9 mod_perl/2.0.9 Perl/v5.22.1 Server at froland.ru Port 80</address>

SERVER_SOFTWARE=Apache/2.4.41 (Ubuntu) PHP/5.3.29 mod_fcgid/2.3.9 mod_perl/2.0.9 Perl/v5.22.1
SERVER_NAME=froland.ru
SERVER_ADDR=10.3.117.188
SERVER_PORT=80
REMOTE_ADDR=35.175.191.36
DOCUMENT_ROOT=/home/frolan01/froland.ru/docs
REQUEST_SCHEME=http
CONTEXT_PREFIX=
CONTEXT_DOCUMENT_ROOT=/home/frolan01/froland.ru/docs
SERVER_ADMIN=postmaster@froland.ru
SCRIPT_FILENAME=/home/frolan01/froland.ru/docs/samodel/ssi2_1.html
REMOTE_PORT=56108
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.0
REQUEST_METHOD=GET
QUERY_STRING=
REQUEST_URI=/samodel/ssi2_1.html
SCRIPT_NAME=/samodel/ssi2_1.html
DATE_LOCAL=25.07.2021, 11:49
DATE_GMT=25.07.2021, 08:49
LAST_MODIFIED=17.11.2017, 06:20
DOCUMENT_URI=/samodel/ssi2_1.html
DOCUMENT_ARGS=
USER_NAME=frolan01
DOCUMENT_NAME=ssi2_1.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>

–езультат

/home/frolan01/froland.ru/docs/samodel/ssi2_1.html

(none)

(none)

≈сли заданна€ переменна€ не определена на данном сервере, выводитс€ (none).

#set

”станавливает значение переменной

јтрибуты: var, value (используютс€ вместе)

var — определ€ет им€ переменной;

value — определ€ет значение переменной.

ѕ–»ћ≈–

<!--#set var = "test1" value = "“естируем директиву #set" -->
<p><!--#echo var = "test1" --></p>

–езультат

“естируем директиву #set

froland2@yandex.ru


 [ѕодъезжа€ к своей станцыи, у мен€ слетела шл€па]