SSI parsed
Server Side Include
SSI parsed
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 - 195.34.32.11
Твой броузер - DISCo Pump 3.0
Мой сервер - inoy.org
Ты пришел со страницы - (none)
include fileinclude virtual
Включает в html-файл в месте, где идет вызов SSI, содержимое указанного файла.
Отличие include file от include virtual в том, что в первом случает используется файл,
находящийся в том же каталоге, что и html-файл, во втором случает указывается путь к файлу относительно текущего
каталога.
Если с помощью include file или include virtual включается cgi-скрипт, то в содержимое
страницы попадет вывод cgi-скрипта, а не его содержание.
fsize file
Вставляет размер указанного файла.
Размер файла этой страницы:
<!--#fsize file="ssi.shtml"--> <BR>
Вывод:
Размер файла этой страницы:
12k
flastmod file
Вставляет время последней модификации указанного файла.
Время последней модификации файла этой страницы:
<!--#flastmod file="ssi.shtml"--> <BR>
Вывод:
Время последней модификации файла этой страницы:
Wednesday, 21-Jun-2000 16:31:33 MSD
exec cmdexec cgi
Запускает внешнюю программу (exec cmd) или cgi-скрипт (exec cgi)
и вставляет в содержимое страницы вывод.
config errmsgconfig sizefmtconfig timefmt
Изменяет различный параметры конфигурации SSI.
config errmsg изменяет
стандартное собщение об ошибке на введенное пользователем.
Сообщение об ошибке возникает при неправильном
выполнении SSI-директивы, например при отсутствии cgi-скрипта, который ты пытаешься запустить.
Это стандартная ошибка при запуске скрипта, которого нет:
<BR>
<!--#exec cgi="/cgi-bin/nonexistence.pl"--> <BR>
А теперь заменим сообщение об ошибке и повторим:
<BR>
<!--#config errmsg="Ошибка, пишите <a href=mailto:admin@inoy.org>автору ошибки</a>"-->
<!--#exec cgi="/cgi-bin/nonexistence.pl"--> <BR>
Вывод:
Это стандартная ошибка, возникающая при запуске скрипта, которого нет:
[an error occurred while processing this directive]
А теперь заменим сообщение об ошибке и повторим:
Ошибка, пишите автору ошибки
Директива config sizefmt изменяет формат вывода размера файла.
Размер файла этой страницы в килобайтах:
<!--#config sizefmt="abbrev"-->
<!--#fsize file="ssi.shtml"--> <BR>
Размер файла этой страницы в байтах:
<!--#config sizefmt="bytes"-->
<!--#fsize file="ssi.shtml"--> <BR>
Вывод:
Размер файла этой страницы в килобайтах:
12k
Размер файла этой страницы в байтах:
12,463
Директива config timefmt меняет формат вывода даты и времени.
Время модификации файла этой страницы в секундах с 01.01.1970:
<!--#config timefmt="%s"-->
<!--#flastmod file="ssi.shtml"--> <BR>
Время модификации файла этой страницы в читабельном виде:
<!--#config timefmt="%d.%m.%Y %H:%M:%S"-->
<!--#flastmod file="ssi.shtml"--> <BR>
Вывод:
Время модификации файла этой страницы в секундах с 01.01.1970:
961590693
Время модификации файла этой страницы в читабельном виде:
21.06.2000 16:31:33
Параметры, используемые в 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 -->
Вывод:
Список переменных окружения:
DOCUMENT_ROOT=/home/inoyorg/www
HTTP_ACCEPT=*/*, audio/*;q=0, video/*;q=0
HTTP_ACCEPT_CHARSET=windows-1251, *;q=0.5
HTTP_CACHE_CONTROL=max-age=259200
HTTP_CONNECTION=keep-alive
HTTP_HOST=inoy.org
HTTP_PRAGMA=no-cache
HTTP_USER_AGENT=DISCo Pump 3.0
HTTP_VIA=1.0 proxy.inoy.org:3128 (Squid/2.2.STABLE4)
HTTP_X_FORWARDED_FOR=212.188.105.46
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
REMOTE_ADDR=195.34.32.11
REMOTE_HOST=ns1.inoy.org
REMOTE_PORT=9362
SCRIPT_FILENAME=/home/inoyorg/lib/ssi.shtml
SERVER_ADDR=195.230.75.98
SERVER_ADMIN=admin@inoy.org
SERVER_NAME=inoy.org
SERVER_PORT=80
SERVER_SIGNATURE=
SERVER_SOFTWARE=Apache/1.3.12 (Unix)
UNIQUE_ID=Ohh4AsPmS2IAAYIGdW8
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.0
REQUEST_METHOD=GET
QUERY_STRING=
REQUEST_URI=/lib/ssi.shtml
SCRIPT_NAME=/lib/ssi.shtml
DATE_LOCAL=20.11.2000 04:01:54
DATE_GMT=20.11.2000 01:01:54
LAST_MODIFIED=21.06.2000 16:31:33
DOCUMENT_URI=/lib/ssi.shtml
DOCUMENT_PATH_INFO=
USER_NAME=inoy
DOCUMENT_NAME=ssi.shtml
set var
Устанавливает значение переменной окружения.
Формат такой set var="ИМЯ_ПЕРЕМЕННОЙ" value="ЗНАЧЕНИЕ".
Значение переменной SERVER_NAME:
<!--#echo var="SERVER_NAME" --><BR>
Сменим значение:
<!--#set var="SERVER_NAME" value="wap.inoy.org" --><BR>
Значение переменной SERVER_NAME:
<!--#echo var="SERVER_NAME" --><BR>
Вывод:
Значение переменной SERVER_NAME:inoy.org
Сменим значение:
Значение переменной SERVER_NAME:
wap.inoy.org
if/else
Наличие такой команды не может не радовать...:) Применяется для управления выводом
страницы по условию.
Синтаксис такой:
<!--#if expr="УСЛОВИЕ1" -->
HTML-код, который будет выводиться, если УСЛОВИЕ1 истинно
<--#elif expr="УСЛОВИЕ2" -->
HTML-код, который будет выводиться, если УСЛОВИЕ1 ложно, а УСЛОВИЕ2 истинно
<--#else -->
HTML-код, который будет выводиться, если все условия ложны
<--#endif -->
Условие - это либо строка, которая является истинной, если непустая, или набор операторов сравнения строк.
Операторы могут быть =,!=,<,<=,> и >.
Если вторая строка
заключена в "/"(слэши), то условие истинно, если в первой строке встречается хоть одно вхождение второй строки.
Можно объединять
несколько операторов сравнения с помощью операторов &&(И) и ||(ИЛИ).
Для группирования условий используются
"()"(скобки).
Броузер:<b>
<!--#if expr="$HTTP_USER_AGENT=/Nav/ || $HTTP_USER_AGENT=/Mozilla/" -->
Netscape Navigator
<!--#elif expr="$HTTP_USER_AGENT=/MSIE/" -->
Internet Explorer
<!--#else -->
Неизвестный (<!--#echo var="HTTP_USER_AGENT" -->)
<!--#endif -->
</b>
Вывод:
Броузер:
Неизвестный (DISCo Pump 3.0)