Ерижоков А.А., 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_директива="параметры" -->
Использовать можно следующие 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 - 212.7.9.34
Твой броузер - GetRight/4.1.2
Мой сервер - www.citforum.interline.ru
Ты пришел со страницы - (none)
- include file
include 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 cmd
exec cgi
-
Запускает внешнюю программу (exec cmd) или
cgi-скрипт (exec cgi) и вставляет в содержимое страницы вывод.
- 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.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 -->
Вывод:
Список переменных окружения:
CHARSET=koi8-r CHARSET_DETERMINED_BY=Default CHARSET_HTTP_METHOD=http://
CHARSET_SERVER_NAME=www.citforum.interline.ru:80 CHARSET_SERVER_PORT=80
DOCUMENT_ROOT=/A/www/virtual/www.citforum HTTP_ACCEPT=*.*, */* HTTP_CACHE_CONTROL=no-cache,
max-age=604800 HTTP_CONNECTION=keep-alive HTTP_HOST=www.citforum.interline.ru
HTTP_PRAGMA=no-cache HTTP_USER_AGENT=GetRight/4.1.2 HTTP_VIA=1.1 cache1.infonet.ee:8080
(Squid/2.3.STABLE4-hno.20000819) HTTP_X_FORWARDED_FOR=212.7.1.120 PATH=/sbin:/bin:/usr/sbin:/usr/bin
REMOTE_ADDR=212.7.9.34 REMOTE_PORT=42047 SCRIPT_FILENAME=/A/www/virtual/www.citforum/internet/html/ssi.shtml
SERVER_ADDR=213.24.168.74 SERVER_ADMIN=Hostmaster@interline.ru SERVER_NAME=www.citforum.interline.ru
SERVER_PORT=80 SERVER_SIGNATURE=
Apache/1.3.9 Server at www.citforum.interline.ru Port 80
SERVER_SOFTWARE=Apache/1.3.9 (Unix) PHP/3.0.12 mod_ssl/2.4.6 OpenSSL/0.9.4
rus/PL28.20 SOURCE_CHARSET=windows-1251 GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.0
REQUEST_METHOD=GET QUERY_STRING= REQUEST_URI=/internet/html/ssi.shtml
SCRIPT_NAME=/internet/html/ssi.shtml DATE_LOCAL=16.10.2000 23:15:03
DATE_GMT=16.10.2000 20:15:03 LAST_MODIFIED=21.06.2000 16:31:33 DOCUMENT_URI=/internet/html/ssi.shtml
DOCUMENT_PATH_INFO= USER_NAME=root DOCUMENT_NAME=ssi.shtml
- 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:www.citforum.interline.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/ || $HTTP_USER_AGENT=/Mozilla/"
-->
Netscape Navigator
<!--#elif expr="$HTTP_USER_AGENT=/MSIE/" -->
Internet Explorer
<!--#else -->
Неизвестный (<!--#echo var="HTTP_USER_AGENT" -->)
<!--#endif -->
</b>
Вывод:
Броузер: Неизвестный (GetRight/4.1.2)
(c)Ерижоков А.А., 2000.
Использование данного документа разрешено только с согласия автора и с
указанием первоисточника: DH's
Linux Site
|