Главная » SSI » Основы SSI
Основы SSI
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 - 213.59.136.10
Твой броузер - Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Мой сервер - www.citforum.ru
Ты пришел со страницы - http://vakh.online.com.ua/promo/library/index.html -
include file
include file
Включает в 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 -->
Вывод:
Список переменных окружения:
DOCUMENT_ROOT=/webdata/citforum/htdocs
HTTP_ACCEPT=*/*
HTTP_ACCEPT_LANGUAGE=ru
HTTP_CONNECTION=keep-alive
HTTP_HOST=www.citforum.ru
HTTP_REFERER=http://vakh.online.com.ua/promo/library/index.html
HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
HTTP_VIA=1.1 ce
HTTP_X_FORWARDED_FOR=213.59.141.209
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
REMOTE_ADDR=213.59.136.10
REMOTE_HOST=nat-cisco-gw.net.kht.ru
REMOTE_PORT=41305
SCRIPT_FILENAME=/webdata/citforum/htdocs/internet/html/ssi.shtml
SERVER_ADDR=195.230.75.98
SERVER_ADMIN=info@citforum.ru
SERVER_NAME=www.citforum.ru
SERVER_PORT=80
SERVER_SIGNATURE=
SERVER_SOFTWARE=Apache/1.3.12 (Unix) mod_ssl/2.6.2 OpenSSL/0.9.4
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
REQUEST_METHOD=GET
QUERY_STRING=
REQUEST_URI=/internet/html/ssi.shtml
SCRIPT_NAME=/internet/html/ssi.shtml
DATE_LOCAL=11.07.2001 10:44:14
DATE_GMT=11.07.2001 06:44:14
LAST_MODIFIED=21.06.2000 16:31:33
DOCUMENT_URI=/internet/html/ssi.shtml
DOCUMENT_PATH_INFO=
USER_NAME=andreya
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.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>
Вывод:
Броузер: Netscape Navigator
Рекомендуем почитать