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_директива="параметры" -->

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

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

Твой IP - <!--#echo var="REMOTE_ADDR"--> <BR>
Твой броузер - <!--#echo var="HTTP_USER_AGENT"--> <BR>
Мой сервер - <!--#echo var="SERVER_NAME"--> <BR>
Ты пришел со страницы - <!--#echo var="HTTP_REFERER"--> <BR>

А вот вывод:

Твой IP - (none)
Твой броузер - CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
Мой сервер - dh.opennet.ru
Ты пришел со страницы - (none)

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

Список переменных окружения: <BR>
<!--#include virtual="/cgi-bin/env.pl"--> <BR>
Мой PGP ключ: <BR>
<!--#include file="dh.asc"--> <BR>

А вот и вывод:

Список переменных окружения:
CHARSET = koi8-r
CHARSET_DETERMINED_BY = Default
CHARSET_HTTP_METHOD = http://
CHARSET_SERVER_NAME = dh.opennet.ru:80
CHARSET_SERVER_PORT = 80
DATE_GMT = Monday, 06-Sep-2010 03:14:43 GMT
DATE_LOCAL = Monday, 06-Sep-2010 09:14:43 YEKST
DOCUMENT_NAME = ssi.html
DOCUMENT_PATH_INFO =
DOCUMENT_ROOT = /home/dh/htdocs
DOCUMENT_URI = /ssi.html
GATEWAY_INTERFACE = CGI/1.1
HTTP_ACCEPT = text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
HTTP_ACCEPT_CHARSET = ISO-8859-1,utf-8;q=0.7,*;q=0.7
HTTP_ACCEPT_ENCODING = gzip
HTTP_ACCEPT_LANGUAGE = en-us,en;q=0.5
HTTP_CACHE_CONTROL = no-cache
HTTP_CONNECTION = close
HTTP_HOST = dh.opennet.ru
HTTP_PRAGMA = no-cache
HTTP_USER_AGENT = CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
HTTP_X_CC_ID = ccc02-01
LAST_MODIFIED = Wednesday, 02-May-2001 22:20:39 YEKST
PATH = /usr/local/bin:/usr/bin:/bin
QUERY_STRING =
REMOTE_ADDR = 38.107.191.92
REMOTE_PORT = 21165
REQUEST_METHOD = GET
REQUEST_URI = /ssi.html
SCRIPT_FILENAME = /home/dh/cgi-bin/env.pl
SCRIPT_NAME = /cgi-bin/env.pl
SERVER_ADDR = 217.195.210.162
SERVER_ADMIN = mc@tyumen.ru
SERVER_NAME = dh.opennet.ru
SERVER_PORT = 80
SERVER_PROTOCOL = INCLUDED
SERVER_SOFTWARE = Apache
USER_NAME = dh

Мой 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
Вставляет размер указанного файла.

Размер файла этой страницы:
<!--#fsize file="ssi.html"--> <BR>

Вывод:

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

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

Время последней модификации файла этой страницы:
<!--#flastmod file="ssi.html"--> <BR>

Вывод:

Время последней модификации файла этой страницы: Wednesday, 02-May-2001 22:20:39 YEKST

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

Немного информации о тебе: <BR>
<!--#exec cgi="/cgi-bin/aboutyou.pl"--> <BR>
Сейчас: <!--#exec cmd="date"--> <BR>

Вывод:

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

Ты пользуешься броузером Spider/Robot для операционной системы Spider/Robot. У тебя прямой доступ в Internet. Твой IP - 38.107.191.92, а имя хоста -

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

#
# Query terms are ambiguous. The query is assumed to be:
# "n 38.107.191.92"
#
# Use "?" to get help.
#

#
# The following results may also be obtained via:
# http://whois.arin.net/rest/nets;q=38.107.191.92?showDetails=true&showARIN=false
#

NetRange: 38.0.0.0 - 38.255.255.255
CIDR: 38.0.0.0/8
OriginAS:
NetName: PSINETA
NetHandle: NET-38-0-0-0-1
Parent:
NetType: Direct Allocation
NameServer: NS.PSI.NET
NameServer: NS2.PSI.NET
Comment: Reassignment information for this block can be found at
Comment: rwhois.cogentco.com 4321
RegDate: 1991-04-16
Updated: 2005-10-05
Ref: http://whois.arin.net/rest/net/NET-38-0-0-0-1


OrgName: PSINet, Inc.
OrgId: PSI
Address: 1015 31st St NW
City: Washington
StateProv: DC
PostalCode: 20007
Country: US
RegDate:
Updated: 2008-12-12
Comment: rwhois.cogentco.com
Ref: http://whois.arin.net/rest/org/PSI

ReferralServer: rwhois://rwhois.cogentco.com:4321/

OrgTechHandle: IPALL-ARIN
OrgTechName: IP Allocation
OrgTechPhone: +1-877-875-4311
OrgTechEmail: ipalloc@cogentco.com
OrgTechRef: http://whois.arin.net/rest/poc/IPALL-ARIN

OrgAbuseHandle: COGEN-ARIN
OrgAbuseName: Cogent Abuse
OrgAbusePhone: +1-877-875-4311
OrgAbuseEmail: abuse@cogentco.com
OrgAbuseRef: http://whois.arin.net/rest/poc/COGEN-ARIN

OrgNOCHandle: ZC108-ARIN
OrgNOCName: Cogent Communications
OrgNOCPhone: +1-877-875-4311
OrgNOCEmail: noc@cogentco.com
OrgNOCRef: http://whois.arin.net/rest/poc/ZC108-ARIN

RTechHandle: PSI-NISC-ARIN
RTechName: IP Allocation
RTechPhone: +1-877-875-4311
RTechEmail: ipalloc@cogentco.com

Не так уж и много... :)



Сейчас:

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

Это стандартная ошибка при запуске скрипта, которого нет: <BR>
<!--#exec cgi="/cgi-bin/nonexistence.pl"--> <BR>
А теперь заменим сообщение об ошибке и повторим: <BR>
<!--#config errmsg="Ошибка, пишите <a href=mailto:dh@null.ru>автору ошибки</a>"-->
<!--#exec cgi="/cgi-bin/nonexistence.pl"--> <BR>

Вывод:

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

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

Размер файла этой страницы в килобайтах:
<!--#config sizefmt="abbrev"-->
<!--#fsize file="ssi.html"--> <BR>
Размер файла этой страницы в байтах:
<!--#config sizefmt="bytes"-->
<!--#fsize file="ssi.html"--> <BR>

Вывод:

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

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

Время модификации файла этой страницы в секундах с 01.01.1970:
<!--#config timefmt="%s"-->
<!--#flastmod file="ssi.html"--> <BR>
Время модификации файла этой страницы в читабельном виде:
<!--#config timefmt="%d.%m.%Y %H:%M:%S"-->
<!--#flastmod file="ssi.html"--> <BR>

Вывод:

Время модификации файла этой страницы в секундах с 01.01.1970: 988820439
Время модификации файла этой страницы в читабельном виде: 02.05.2001 22:20:39

Параметры, используемые в 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
Выводит все переменные окружения. Параметров не имеет.

Список переменных окружения:<BR>
<!--#printenv -->

Вывод:

Список переменных окружения:
CHARSET=koi8-r CHARSET_DETERMINED_BY=Default CHARSET_HTTP_METHOD=http:// CHARSET_SERVER_NAME=dh.opennet.ru:80 CHARSET_SERVER_PORT=80 DOCUMENT_ROOT=/home/dh/htdocs HTTP_ACCEPT=text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HTTP_ACCEPT_CHARSET=ISO-8859-1,utf-8;q=0.7,*;q=0.7 HTTP_ACCEPT_ENCODING=gzip HTTP_ACCEPT_LANGUAGE=en-us,en;q=0.5 HTTP_CACHE_CONTROL=no-cache HTTP_CONNECTION=close HTTP_HOST=dh.opennet.ru HTTP_PRAGMA=no-cache HTTP_USER_AGENT=CCBot/1.0 (+http://www.commoncrawl.org/bot.html) HTTP_X_CC_ID=ccc02-01 PATH=/usr/bin:/bin REMOTE_ADDR=38.107.191.92 REMOTE_PORT=21165 SCRIPT_FILENAME=/home/dh/htdocs/ssi.html SERVER_ADDR=217.195.210.162 SERVER_ADMIN=mc@tyumen.ru SERVER_NAME=dh.opennet.ru SERVER_PORT=80 SERVER_SIGNATURE=<ADDRESS>Apache/1.3.33 Server at dh.opennet.ru Port 80</ADDRESS> SERVER_SOFTWARE=Apache SOURCE_CHARSET=koi8-r GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.1 REQUEST_METHOD=GET QUERY_STRING= REQUEST_URI=/ssi.html SCRIPT_NAME=/ssi.html DATE_LOCAL=06.09.2010 09:14:43 DATE_GMT=06.09.2010 03:14:43 LAST_MODIFIED=02.05.2001 22:20:39 DOCUMENT_URI=/ssi.html DOCUMENT_PATH_INFO= USER_NAME=dh DOCUMENT_NAME=ssi.html

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

Значение переменной SERVER_NAME:
<!--#echo var="SERVER_NAME" --><BR>
Сменим значение:
<!--#set var="SERVER_NAME" value="www.dhls.ru" --><BR>
Значение переменной SERVER_NAME:
<!--#echo var="SERVER_NAME" --><BR>

Вывод:

Значение переменной SERVER_NAME:dh.opennet.ru
Сменим значение:
Значение переменной SERVER_NAME: www.dhls.ru

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

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

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

Броузер:<b>
<!--#if expr="$HTTP_USER_AGENT=/Nav/" -->
Netscape Navigator
<!--#elif expr="$HTTP_USER_AGENT=/MSIE/" -->
Internet Explorer
<!--#else -->
Неизвестный (<!--#echo var="HTTP_USER_AGENT" -->)
<!--#endif -->
</b>

Вывод:
Броузер: Неизвестный (CCBot/1.0 (+http://www.commoncrawl.org/bot.html))

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


Последнее изменение
02.05.2001 22:20:39