<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.p3.ru/index.php?action=history&amp;feed=atom&amp;title=SSI_-_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8</id>
	<title>SSI - переменные и настройки - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.p3.ru/index.php?action=history&amp;feed=atom&amp;title=SSI_-_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8"/>
	<link rel="alternate" type="text/html" href="https://wiki.p3.ru/index.php?title=SSI_-_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8&amp;action=history"/>
	<updated>2026-05-03T02:20:44Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.p3.ru/index.php?title=SSI_-_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8&amp;diff=230&amp;oldid=prev</id>
		<title>TTK: /* Практическое использование SSI */</title>
		<link rel="alternate" type="text/html" href="https://wiki.p3.ru/index.php?title=SSI_-_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8&amp;diff=230&amp;oldid=prev"/>
		<updated>2012-08-22T14:14:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Практическое использование SSI&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt; Основным, простейшим, но в то же время чрезвычайно мощным инструментом поддержки больших наборов документов &lt;br /&gt;
 является SSI (Server-Side Includes - включения на стороне сервера). Если кто-то из вас знает Си, то он быстро поймет, что SSI чрезвычайно похож на макроязык. &lt;br /&gt;
 С помощью SSI можно не только в зависимости от некоторых условий выводить определенные части документа, &lt;br /&gt;
 не только формировать документ из заранее определенных кусочков, но и вставлять результат работы некоторого CGI сценария или программы прямо в документ.&lt;br /&gt;
 Не смотря на порядок слов в заголовке (что, когда и как) мы сначала расскажем &amp;quot;как&amp;quot;, а потом уже перейдем к &amp;quot;когда&amp;quot;.&lt;br /&gt;
 В стандартном дистрибутиве Apache есть модуль mod_include. Начиная с версии 1.2 он имеет расширенное количество директив и называется - XSSI (eXtended SSI). &lt;br /&gt;
 По умолчанию он включен в компиляцию.&lt;br /&gt;
&lt;br /&gt;
==Включение механизма Server-Side Includes==&lt;br /&gt;
&lt;br /&gt;
Любой документ, у которого будет установлен обработчик &amp;quot;server-parsed&amp;quot; будет сканироваться этим модулем, если включена опция &amp;quot;Includes&amp;quot;. Если вы имеете малое количество документов с SSI, то лучше всего в файле httpd.conf указать следующее:&lt;br /&gt;
AddType text/html .shtml AddHandler server-parsed .shtml &lt;br /&gt;
&lt;br /&gt;
и устанавливать у таких файлов расширение .shtml. Если же все или почти все документы будут иметь директивы SSI, то лучше в файле конфигурации указать:&lt;br /&gt;
AddHandler server-parsed .html &lt;br /&gt;
&lt;br /&gt;
И не забудьте включить в опции директории узла опцию Includes:&lt;br /&gt;
Options +Includes &lt;br /&gt;
&lt;br /&gt;
Конечно в этой строке могут быть и другие нужные вам опции.&lt;br /&gt;
&lt;br /&gt;
==Базовые директивы==&lt;br /&gt;
&lt;br /&gt;
Директивы SSI включаются в HTML документ в виде комментариев (это не мешает вам использовать обычные комментарии). Синтакс команд имеет следующий вид:&lt;br /&gt;
&amp;lt;!--#element attribute=value attribute=value ... --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Очень часто значение помещается в двойные кавычки. Некоторые команды позволяют иметь только одну пару атрибут-значение. Обратите внимание, что заключительная часть комментария (--&amp;gt;) должна отделяться от директивы пробелом, иначе она будет воспринята, как ее часть. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим определенные в Apache элементы SSI:&lt;br /&gt;
&lt;br /&gt;
config - контролирует различные аспекты сканирования. Его атрибутами могут быть:&lt;br /&gt;
&lt;br /&gt;
errmsg - устанавливает сообщение, выводящееся при возникновении ошибки; в большинстве случаев целесообразно установить в пустую строку;&lt;br /&gt;
&lt;br /&gt;
sizefmt - устанавливает формат, в котором будет выводиться размер файла. Формат соответствует передаваемому библиотечной функции strftime;&lt;br /&gt;
&lt;br /&gt;
timefmt - устанавливает формат, в котором будет выводиться дата.&lt;br /&gt;
&lt;br /&gt;
echo - выводит значение установленной переменной SSI. Допустимым атрибутом является var.&lt;br /&gt;
&lt;br /&gt;
fsize - выводит размер файла в определенном с помощью sizefmt формате. Допустимые атрибуты:&lt;br /&gt;
&lt;br /&gt;
file - определяет путь к файлу, относительно сканируемого документа;&lt;br /&gt;
&lt;br /&gt;
virtual - определяет стандартный кодированный URL, относительно сканируемого документа, или, при наличии в начале слеша (/) - относительно корня документов узла.&lt;br /&gt;
&lt;br /&gt;
flastmod - выводит дату последней модификации файла в определенном с помощью timefmt формате. Атрибуты аналогичны атрибутам fsize.&lt;br /&gt;
&lt;br /&gt;
include - включает текст другого документа или файла в сканируемый файл. К включаемому файлу применяются все установленные правила ограничения доступа. Если для каталога, из которого включается файл, установлена опция IncludesNOEXEC, и включение данного документа привело бы к запуску программы, то документ не включается, и выводится сообщение об ошибке. CGI сценарии вызываются, как обычно с помощью URL, который может содержать кодированную строку запроса (query string). Положение файла указывается с помощью атрибутов:&lt;br /&gt;
&lt;br /&gt;
file - указывает путь, относительно сканируемого документа; путь не может содержать ../ и не может быть абсолютным путем; всегда предпочтительнее использовать атрибут virtual;&lt;br /&gt;
virtual - содержит кодированный URL, относительный или абсолютный; URL не может содержать имя протокола или имя хоста, и может содержать строку запроса.&lt;br /&gt;
&lt;br /&gt;
printenv - выводит содержимое переменных окружения. Вызывается без параметров.&lt;br /&gt;
&lt;br /&gt;
set - устанавливает значение переменной. Ее атрибутами являются var, определяющий имя переменной, и value, определяющий ее значение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Переменные включения==&lt;br /&gt;
В дополнение к стандартным окружения CGI, модуль SSI делает доступными для директив и условий, а также для вызываемых через SSI сценариев следующие переменные:&lt;br /&gt;
DATE_GMT - текущее время по Гринвичу;&lt;br /&gt;
DATE_LOCAL - текущее локальное (для сервера) время;&lt;br /&gt;
DOCUMENT_NAME - имя файла (без каталогов) документа, запрошенного пользователем;&lt;br /&gt;
DOCUMENT_URI - декодированный URL запрошенного пользователем документа;&lt;br /&gt;
LAST_MODIFIED - дата последней модификации документа, запрошенного пользователем. То есть во вложенном SSI эта переменная будет содержать имя &amp;quot;главного&amp;quot; документа, а не вложенного.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Подстановка переменных==&lt;br /&gt;
&lt;br /&gt;
Подстановка переменных производится внутри заключенных в кавычки строк в большинстве аргументов SSI директив. В этих случаях знак доллара можно вставить, предварив его слешом:&lt;br /&gt;
&amp;lt;!--#if expr=&amp;quot;$a = \$test&amp;quot; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Для предотвращения двусмысленности можно заключать имя переменной в фигурные скобки:&lt;br /&gt;
&amp;lt;!--#set var=&amp;quot;Zed&amp;quot; value=&amp;quot;${a}bc_${abc}&amp;quot; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В результате такого присвоения переменная Zed будет иметь значение &amp;quot;Xbc_Y&amp;quot;, если переменная a равна X, а переменная abc равна Y.&lt;br /&gt;
&lt;br /&gt;
==Условные операторы==&lt;br /&gt;
Базовыми элементами контроля являются:&lt;br /&gt;
&amp;lt;!--#if expr=&amp;quot;test_condition&amp;quot; --&amp;gt;&lt;br /&gt;
 &amp;lt;!--#elif expr=&amp;quot;test_condition&amp;quot; --&amp;gt;&lt;br /&gt;
 &amp;lt;!--#else --&amp;gt;&lt;br /&gt;
 &amp;lt;!--#endif --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Элементы elif и else являются необязательными.&lt;br /&gt;
&lt;br /&gt;
Элемент endif заканчивает элемент if и является обязательным. &lt;br /&gt;
&lt;br /&gt;
test_condition может быть одним из следующих:&lt;br /&gt;
&lt;br /&gt;
 string - истинно, если string не пуста;&lt;br /&gt;
 string1 = string2&lt;br /&gt;
 string1 != string2&lt;br /&gt;
 string1 &amp;lt; string2&lt;br /&gt;
 string1 &amp;lt;= string2&lt;br /&gt;
 string1 &amp;gt; string2&lt;br /&gt;
 string1 &amp;gt;= string2&lt;br /&gt;
&lt;br /&gt;
истинно, если выполняется условие сравнения. Если string2 имеет форму /string/, то тогда она интерпретируется, как регулятное выражение. Их синтаксис аналогичен синтаксису регулярных выражений в Unix команде egrep;&lt;br /&gt;
&lt;br /&gt;
( test_condition ) - истинно, если test_condition истинно;&lt;br /&gt;
! test_condition - истинно, если test_condition ложно;&lt;br /&gt;
test_condition1 &amp;amp;&amp;amp; test_condition2 - истинно, если как test_condition1, так и test_condition2 истинны;&lt;br /&gt;
test_condition1 || test_condition2 - истинно, если хотя бы test_condition1 или test_condition2 истинно.&lt;br /&gt;
 &amp;quot;=&amp;quot; и &amp;quot;!=&amp;quot; имеют больший приоритет, чем &amp;quot;&amp;amp;&amp;amp;&amp;quot; и &amp;quot;||&amp;quot;, а &amp;quot;!&amp;quot; имеет наивысший приоритет.&lt;br /&gt;
&lt;br /&gt;
Все, что не распознается, как переменная, считается строкой. Если строка имеет пробелы или символы табуляции, то ее надо заключать в кавычки.&lt;br /&gt;
&lt;br /&gt;
== Практическое использование SSI==&lt;br /&gt;
Первым распространенным применением SSI является внедрение в документ некоего динамического куска разметки. Хрестоматийными примерами могут служить счетчики посещений, цитаты или баннеры рекламных сетей. В любом случае, будь то строка текста или целая таблица, вставка производится с помощью директивы include, помещаемой в то место, куда должен быть вставлен кусок разметки:&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 Документ с баннером внизу страницы&lt;br /&gt;
 &amp;lt;!--#include virtual=&amp;quot;/cgi-bin/ibanner.pl?webclub&amp;quot; --&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Программа или сценарий CGI, вставляемая с помощью SSI, ничем не отличается от стандартной CGI программы, за исключением того, что должен выдаваться не целый документ, а только кусок разметки.&lt;br /&gt;
&lt;br /&gt;
Вот текст упомянутого выше сценария:&lt;br /&gt;
 #!/usr/local/bin/perl&lt;br /&gt;
 $login=$ENV{&amp;quot;QUERY_STRING&amp;quot;};&lt;br /&gt;
 print &amp;quot;Content-type: text/html\n\n&amp;quot;;&lt;br /&gt;
 ($IP)=($ENV{&amp;quot;REMOTE_ADDR&amp;quot;}=~s/\.//g);&lt;br /&gt;
 srand($$+$IP+time);&lt;br /&gt;
 $seed=int rand(10000000);&lt;br /&gt;
 print &amp;quot;&amp;lt;a href=\&amp;quot;http://www.reklama.ru/cgi-bin/href/$login?$seed\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
 print &amp;quot;&amp;lt;img src=\&amp;quot;http://www.reklama.ru/cgi-bin/banner/$login?$seed\&amp;quot; width=468 height=60 border=0&amp;gt;\n&amp;quot;;&lt;br /&gt;
 print &amp;quot;&amp;lt;/a&amp;gt;\n&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
Как видно из примера даже во включаемых сценариях необходимо выводить HTTP заголовок.&lt;br /&gt;
&lt;br /&gt;
В результате сканирования нашего простейшего документа пользователю будет возвращен примерно (с точностью до случайной величины) следующий документ:&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 Документ с баннером внизу страницы&lt;br /&gt;
 &amp;lt;a href=&amp;quot;http://www.reklama.ru/cgi-bin/href/webclub?348593&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img src=&amp;quot;http://www.reklama.ru/cgi-bin/banner/webclub?348593&amp;quot; width=468 height=60 border=0&amp;gt;&lt;br /&gt;
 &amp;lt;/a&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Вторым распространенным применением SSI является формирование страницы из шаблона. В простейшем случае - это документ в начало и конец которого вставляются шапка и концевик:&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;Test Page&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;!--#include virtual=&amp;quot;/ssi/header.html&amp;quot; --&amp;gt;&lt;br /&gt;
 Тестовая страница&lt;br /&gt;
 Некий текст&lt;br /&gt;
 &amp;lt;!--#include virtual=&amp;quot;/ssi/global_menu.html&amp;quot; --&amp;gt;&lt;br /&gt;
 &amp;lt;!--#include virtual=&amp;quot;/ssi/footer.html&amp;quot; --&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставляемые блоки не обязательно должны быть законченными, например, header.html может заканчиваться тэгом &amp;lt;td&amp;gt;, а global_menu.html или footer.html начинаться с тэга &amp;lt;/td&amp;gt;. Таким образом, какими бы навороченными не были шапка и концевик документа, редактируемый документ выглядит чрезвычайно просто, и его легко редактировать.&lt;br /&gt;
&lt;br /&gt;
Только используя SSI вы можете в считанные минуты полностью изменить внешний вид или обновить систему навигации на узле, имеющем сотни или тысячи документов, и так, что это пройдет безболезненно для пользователей узла, т.к. вам только потребуется заменить несколько файлов, а остальное за вас сделает сервер.&lt;br /&gt;
&lt;br /&gt;
В связи со всем вышесказанным рождается одно правило: желательно смысловую часть документа строить так, чтобы она никак не полагалась на содержимое шапок и концевиков. В этом случае вы легко сможете перейти с табличной организации страниц на последовательную или на слоевую.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Хостинг]]&lt;/div&gt;</summary>
		<author><name>TTK</name></author>
	</entry>
</feed>