SSI - Server Side Includes - Директивы включения на стороне сервера

Ерижоков А.А., 2000.

Использование данного документа разрешено только с согласия автора и с указанием первоисточника: DH's Linux Site

SSI расшифровывается как Server Side Include. SSI - это набор команд, позволяющий включить в страницу информацию, недоступную средствами HTML, такую как вывод программ, значения переменных окружения и статистику по файлам (размер, дата создания и др.). Все это и более позволяют делать CGI-скрипты, но зачем писать целый скрипт для получения размера файла, если можно воспользоваться SSI?:)

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

Для указания http-серверу, какие документы считать содержащими SSI-директивы, в srm.conf, находящемся в /etc/httpd/conf надо раскомментировать следующие строки:


AddType text/html .shtml
AddHandler server-parsed .shtml

После этого все документы с расширением .shtml будут проверяться на SSI-директивы. Но удобнее будет определить чтобы все .html-файлы могли содержать SSI. Это делается добавление в srm.conf следующих строчек:


AddType text/html .html # не обязательно, т.к. он и так описан.
AddHandler server-parsed .html

Теперь надо разрешить выполнение SSI в каталоге, в котором лежат твои файла. Найди в access.conf описание каталога, в котором лежат твои html'ы и добавь в его Options директиву Includes:


#было так
Options Indexes
#стало так
Options Indexes Includes

Если твой каталог не прописан, его надо прописать. Почитай доку по Apache, чтоб узнать как это делается.:) А если у тебя нет возможности изменять srm.conf или access.conf, т.е. ты не root, тогда за пивом, а потом к админу.:)

SSI-директивы включаются в html-код в виде комментариев, но определенного формата:



Использовать можно следующие SSI-директивы:

echo var
Используется для вывода значения переменной окружения.

Твой IP -

Твой броузер -

Мой сервер -

Ты пришел со страницы -


А вот вывод:

Твой IP - 194.186.148.202
Твой броузер - Mozilla/4.73 [en] (X11; I; Linux 2.2.14-15mdk i686)
Мой сервер - in-hosting.agava.ru
Ты пришел со страницы - http://dhls.agava.ru/webdesign.html

include file
include virtual
Включает в html-файл в месте, где идет вызов SSI, содержимое указанного файла. Отличие include file от include virtual в том, что в первом случае используется файл, находящийся в том же каталоге, что и html-файл, во втором случае указывается путь к файлу относительно текущего каталога. Если с помощью include file или include virtual включается cgi-скрипт, то в содержимое страницы попадет вывод cgi-скрипта, а не его содержание.

Список переменных окружения:



Мой PGP ключ:




А вот и вывод:

Список переменных окружения:
CHARSET = koi8-r
CHARSET_DETERMINED_BY = UserAgent
CHARSET_HTTP_METHOD = http://
CHARSET_SERVER_NAME = in-hosting.agava.ru:80
CHARSET_SERVER_PORT = 80
DATE_GMT = Saturday, 03-Mar-2001 15:02:32 GMT
DATE_LOCAL = Saturday, 03-Mar-2001 18:02:32 MSK
DOCUMENT_NAME = ssi.html
DOCUMENT_PATH_INFO =
DOCUMENT_ROOT = /home
DOCUMENT_URI = /d/dhls.agava.ru/WWW/ssi.html
GATEWAY_INTERFACE = CGI/1.1
HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
HTTP_ACCEPT_CHARSET = iso-8859-1,*,utf-8
HTTP_ACCEPT_ENCODING = gzip
HTTP_ACCEPT_LANGUAGE = ru, en
HTTP_AGAVA_ACCELERATOR_REMOTE_ADDR = 194.186.148.202
HTTP_CONNECTION = close
HTTP_HOST = dhls.agava.ru
HTTP_REFERER = http://dhls.agava.ru/webdesign.html
HTTP_USER_AGENT = Mozilla/4.73 [en] (X11; I; Linux 2.2.14-15mdk i686)
HTTP_X_FORWARDED_FOR = 194.186.148.202
LAST_MODIFIED = Tuesday, 06-Feb-2001 13:58:25 MSK
PATH = /bin:/usr/bin:/usr/local/bin
PERLLIB = /site/perl/sys:/site/perl/lib
QUERY_STRING =
REMOTE_ADDR = 213.59.3.226
REMOTE_PORT = 1470
REQUEST_METHOD = GET
REQUEST_URI = /d/dhls.agava.ru/WWW/ssi.html
SCRIPT_FILENAME = /home/d/dhls.agava.ru/cgi/env.pl
SCRIPT_NAME = /cgi-bin/env.pl
SCRIPT_URI = http://in-hosting.agava.ru/d/dhls.agava.ru/WWW/ssi.html
SCRIPT_URL = /d/dhls.agava.ru/WWW/ssi.html
SERVER_ADDR = 172.16.1.6
SERVER_ADMIN = webmaster@agava.com
SERVER_NAME = in-hosting.agava.ru
SERVER_PORT = 80
SERVER_PROTOCOL = INCLUDED
SERVER_SOFTWARE = Apache/1.3.14 (Unix) PHP/4.0.3pl1 rus/PL30.0
SOURCE_CHARSET = windows-1251
USER_NAME = dhls1

Мой PGP ключ:
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGPfreeware 5.0i for non-commercial use mQBtAzhowUIAAAEDAM+2uk0Jd15B49ZUd6oN6qsMWI/lLixReCHqRFh/1rCzGChj AS82oFsXzW55bUCHvK2g9BWyPIdP2vr6HirF1RL/7eyZ0kCPgp/btBGMMdFlLEN8 lnZeDa/DyHe9VH8GYwAFEbQPREggPGRoQG51bGwucnU+iQB1AwUQOGjBQsPId71U fwZjAQGfBwMAqOlRs0SbsM/WHunVOGWxRPaIbpU5BmAttA6j/iVzvcO1cn9O2mYw YLuIC5KtucsYIRXPfopifY5RLmSQgnJhBQL2G7IcKGmYh9dTk5LYqJKAus+cNHRl zGZX1Hw2DqOu =0Kmx -----END PGP PUBLIC KEY BLOCK-----

fsize file
Вставляет размер указанного файла.

Размер файла этой страницы:



Вывод:

Размер файла этой страницы: 15k

flastmod file
Вставляет время последней модификации указанного файла.

Время последней модификации файла этой страницы:



Вывод:

Время последней модификации файла этой страницы: Tuesday, 06-Feb-2001 13:58:25 MSK

exec cmd
exec cgi
Запускает внешнюю программу (exec cmd) или cgi-скрипт (exec cgi) и вставляет в содержимое страницы вывод.

Немного информации о тебе:



Сейчас:


Вывод:

Немного информации о тебе:

Ты пользуешься броузером "Netscape" , версии 4.73 [en] для операционной системы " Linux 2.2.14-15mdk i686)". У тебя прямой доступ в Internet. Твой IP - 194.186.148.202, а имя хоста - tura.ru
Не так уж и много... :)



Сейчас:

config errmsg
config sizefmt
config timefmt
Изменяет различный параметры конфигурации SSI. config errmsg изменяет стандартное сообщение об ошибке на введенное пользователем. Сообщение об ошибке возникает при неправильном выполнении SSI-директивы, например при отсутствии cgi-скрипта, который ты пытаешься запустить.

Это стандартная ошибка при запуске скрипта, которого нет:



А теперь заменим сообщение об ошибке и повторим:





Вывод:

Это стандартная ошибка, возникающая при запуске скрипта, которого нет:
[an error occurred while processing this directive]
А теперь заменим сообщение об ошибке и повторим:
Ошибка, пишите автору ошибки

Директива config sizefmt изменяет формат вывода размера файла.

Размер файла этой страницы в килобайтах:



Размер файла этой страницы в байтах:




Вывод:

Размер файла этой страницы в килобайтах: 15k
Размер файла этой страницы в байтах: 14,856

Директива config timefmt меняет формат вывода даты и времени.

Время модификации файла этой страницы в секундах с 01.01.1970:



Время модификации файла этой страницы в читабельном виде:




Вывод:

Время модификации файла этой страницы в секундах с 01.01.1970: 981457105
Время модификации файла этой страницы в читабельном виде: 06.02.2001 13:58:25

Параметры, используемые в config timefmt:
Формат
Описание
Пример
%a Аббревиатура названия дня недели Sun
%A Полное название дня недели Sunday
%b Аббревиатура названия месяца Jan
%B Полное название месяца January
%d День месяца 01 (не 1)
%D Дата в формате "%m/%d/%y" 01/31/90
%e День месяца 1
%H Часы в 24-часовом формате 13
%I Часы в 12-часовом формате 01
%j День года 235
%m Номер месяца 01
%M Минуты 03
%p AM|PM AM
%r Время в формате "%I:%M:%S %p" 11:35:46 PM
%S Секунды 34
%s Время в секундах с 01.01.1970 957228726
%T Время в формате "%H:%M:%S" 14:05:34
%U Неделя года 49
%w Номер дня недели 5
%y Год в формате ГГ 95
%Y Год в формате ГГГГ 1995
%Z Временная зона MSK
printenv
Выводит все переменные окружения. Параметров не имеет.

Список переменных окружения:



Вывод:

Список переменных окружения:
CHARSET=koi8-r CHARSET_DETERMINED_BY=UserAgent CHARSET_HTTP_METHOD=http:// CHARSET_SERVER_NAME=in-hosting.agava.ru:80 CHARSET_SERVER_PORT=80 DOCUMENT_ROOT=/home DOM=dhls.agava.ru HD=/d/dhls.agava.ru HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* HTTP_ACCEPT_CHARSET=iso-8859-1,*,utf-8 HTTP_ACCEPT_ENCODING=gzip HTTP_ACCEPT_LANGUAGE=ru, en HTTP_AGAVA_ACCELERATOR_REMOTE_ADDR=194.186.148.202 HTTP_CONNECTION=close HTTP_HOST=dhls.agava.ru HTTP_REFERER=http://dhls.agava.ru/webdesign.html HTTP_USER_AGENT=Mozilla/4.73 [en] (X11; I; Linux 2.2.14-15mdk i686) HTTP_X_FORWARDED_FOR=194.186.148.202 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin PERLLIB=/site/perl/sys:/site/perl/lib REMOTE_ADDR=213.59.3.226 REMOTE_PORT=1470 SCRIPT_FILENAME=/home/d/dhls.agava.ru/WWW/ssi.html SCRIPT_URI=http://in-hosting.agava.ru/d/dhls.agava.ru/WWW/ssi.html SCRIPT_URL=/d/dhls.agava.ru/WWW/ssi.html SERVER_ADDR=172.16.1.6 SERVER_ADMIN=webmaster@agava.com SERVER_NAME=in-hosting.agava.ru SERVER_PORT=80 SERVER_SIGNATURE=
Apache/1.3.14 Server at in-hosting.agava.ru Port 80
SERVER_SOFTWARE=Apache/1.3.14 (Unix) PHP/4.0.3pl1 rus/PL30.0 SOURCE_CHARSET=windows-1251 TRUURI=ssi.html GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.1 REQUEST_METHOD=GET QUERY_STRING= REQUEST_URI=/d/dhls.agava.ru/WWW/ssi.html SCRIPT_NAME=/d/dhls.agava.ru/WWW/ssi.html DATE_LOCAL=03.03.2001 18:02:32 DATE_GMT=03.03.2001 15:02:32 LAST_MODIFIED=06.02.2001 13:58:25 DOCUMENT_URI=/d/dhls.agava.ru/WWW/ssi.html DOCUMENT_PATH_INFO= USER_NAME=dhls1 DOCUMENT_NAME=ssi.html

set var
Устанавливает значение переменной окружения. Формат такой set var="ИМЯ_ПЕРЕМЕННОЙ" value="ЗНАЧЕНИЕ".

Значение переменной SERVER_NAME:


Сменим значение:


Значение переменной SERVER_NAME:



Вывод:

Значение переменной SERVER_NAME:in-hosting.agava.ru
Сменим значение:
Значение переменной SERVER_NAME: www.dhls.ru

if/else
Наличие такой команды не может не радовать...:) Применяется для управления выводом страницы по условию. Синтаксис такой:


HTML-код, который будет выводиться, если УСЛОВИЕ1 истинно
<--#elif expr="УСЛОВИЕ2" -->
HTML-код, который будет выводиться, если УСЛОВИЕ1 ложно, а УСЛОВИЕ2 истинно
<--#else -->
HTML-код, который будет выводиться, если все условия ложны
<--#endif -->

Условие - это либо строка, которая является истинной, если непустая, или набор операторов сравнения строк. Операторы могут быть =,!=,<,<=,> и >. Если вторая строка заключена в "/"(слэши), то условие истинно, если в первой строке встречается хоть одно вхождение второй строки. Можно объединять несколько операторов сравнения с помощью операторов &&(И) и ||(ИЛИ). Для группирования условий используются "()"(скобки).

Броузер:

Netscape Navigator

Internet Explorer

Неизвестный ()


Вывод:
Броузер: Неизвестный (Mozilla/4.73 [en] (X11; I; Linux 2.2.14-15mdk i686))

(c)Ерижоков А.А., 2000.
Использование данного документа разрешено только с согласия автора и с указанием первоисточника: DH's Linux Site


Ошибка, пишите автору ошибки
Последнее изменение
06.02.2001 13:58:25