Server Side Includes (SSI)

  • Что такое SSI.
  • SSI-набор команд web-сервера, позволяющий создавать HTML-документы прямо на сервере без применения CGI-скриптов.
    Еще SSI-команды позволяют запускать программы на сервере, выводить в HTML страничку значения переменных окружения и вести статистику по дате изменения и размерам файлов.
    Технология SSI разработана фирмой Questar Microsystems. Эту технологию поддерживают такие web-серверы как Apache, Netscape, Spry Web и Microsoft Internet Information Server (MS IIS).

  • Настройка Apache.
  • Для того, чтобы сервер Apache проверял файлы на наличие SSI-команд, следует указать в его настройках расширение файлов, содержащих SSI-команды. Это делается в файле httpd.conf, раскомментированием следующих строк:
    AddType text/html .shtml
    AddHandler server-parsed .shtml
    Для того, чтобы сервер проверял все HTML-документы на наличие SSI-команд, изменим вторую строку на:
    AddHandler server-parsed .shtml .shtm .sht .html .htm

    Теперь разрешим серверу выполнение SSI команд в каталоге вашей страницы.Это делается в блоке операторов, начинающемся строкой:
    <Directory /> и заканчивающемся строкой </Directory>

    <Directory />
    Options Indexes Includes
    AllowOverride All
    </Directory>

    Изменяем строку Options Indexes на Options Indexes Includes

  • Команды SSI.
  • Команды SSI встраиваются в HTML-документ в виде комментариев, например:
    <!--#include file="menu.htm"-->
    Если в сервере отключено выполнение SSI, он отправит браузеру пользователя файл в том виде, в каком он лежит на сервере, а браузер просто проигнорирует закомментированные SSI-команды.

    • #include file

    • Включает в HTML-документ содержимое указанного файла, находящегося в том же каталоге.
      В документ можно вставлять файлы, содержащие команды SSI.
      пример:
      <!--#include file="menu.htm"-->
      В место, где расположена команда, будет встроено содержимое файла menu.htm находящегося в том же каталоге.

    • #include virtual

    • Включает в HTML-документ содержимое указанного файла, с указанием пути относительно текущего каталога.
      пример:
      <!--#include virtual="/price/price.txt"-->
      В место, где расположена команда, будет встроено содержимое файла price.txt находящегося в каталоге /price.
      <!--#include virtual="/cgi-bin/p.pl"-->
      В место, где расположена команда, будет встроен вывод скрипта p.pl

    • #fsize file

    • Включает в HTML-документ размер указанного файла.
      пример:
      Размер этого документа:
      <!--#fsize file="ssi.shtml"-->

      выведет:
      Размер этого документа:
      10k

    • #flastmod file

    • Включает в HTML-документ время последней модификации указанного файла.
      пример:
      Последний раз изменен:
      <!--#flastmod file="ssi.shtml"-->

      выведет:
      Последний раз изменен:
      Wednesday, 14-Feb-2001 14:38:42 Московское время (зима)

    • #exec cmd

    • Запускает внешнюю программу.
      пример:
      Список файлов текущей директории:
      <!--#exec cmd="dir"-->


    • #exec cgi

    • Запуск CGI-скрипта и вставка в содержимое страницы его вывода.
      пример:
      <!--#exec cgi="/cgi-bin/p.pl"-->

    • #config errmsg

    • Изменение стандартного собщения об ошибке.
      пример:
      <!--#config errmsg="Ошибка при выполнении SSI-команды"-->

    • #config sizefmt

    • Изменение формата вывода размера файла.
      пример:
      Вывод размера файла в килобайтах:
      <!--#config sizefmt="abbrev"-->
      <!--#fsize file="ssi.shtml"-->
      Вывод размера файла в байтах:
      <!--#config sizefmt="bytes"-->
      <!--#fsize file="ssi.shtml"-->


    • #config timefmt

    • Изменение формата вывода даты и времени.
      пример:
      Последнее изменение документа:
      <!--#config timefmt="%d.%m.%Y %H:%M:%S"-->
      <!--#flastmod file="ssi.shtml"-->

      выведет:
      14.02.2001 14:38:42

    Таблица параметров timefmt:
    ФорматОписаниеПример
    %aКраткое название дня неделиMon
    %AПолное название дня неделиMonday
    %bКраткое название месяцаFeb
    %BПолное название месяцаFebruary
    %dДень месяца02
    %DДата в формате "%m/%d/%y"02/14/01
    %eДень месяца1
    %HЧасы в 24-часовом формате15
    %IЧасы в 12-часовом формате03
    %jПорядковый номер дня года72
    %mПорядковый номер месяца02
    %MМинуты05
    %pAM|PMAM
    %rВремя в формате "%I:%M:%S %p"12:31:23 PM
    %SСекунды23
    %sВремя в секундах с 01.01.1970765678984
    %TВремя в формате "%H:%M:%S"12:31:23
    %UПорядковый номер недели года6
    %wНомер дня недели1
    %yГод в формате ГГ01
    %YГод в формате ГГГГ2001
    %ZВременная зонаMSK
    Строка формата по умолчанию: "%A, %d-%b-%Y %H:%M:%S %Z"

    • #printenv

    • Вывод всех CGI и SSI переменных окружения.
      Работа с CGI переменными разрешена только если сервер разрешает запуск CGI-скриптов.
      пример:
      <!--#printenv-->

    • #set var

    • Устанавливает значение переменной окружения.
      пример:
      Сменим адрес администратора сервера:
      <!--#set var="SERVER_ADMIN" value="valery@ropnet.ru"-->


    • #echo var

    • Вывод значения переменной окружения.
      пример:
      <!--#echo var="SERVER_NAME"-->



    • #if/else

    • Условное управление выводом.
      Синтаксис команды:
      <!--#if expr="условие1" -->
      команда, которая будет выполняться если условие истинно
      <--#elif expr="условие2" -->
      команда, которая будет выполняться, если условие1 ложно, а условие2 истинно
      <--#else -->
      команда, которая будет выполняться, если все условия ложны
      <--#endif -->

      где условие имеет формат:
      (строка1 оператор сравнения строк строка2)
      Условие может состоять и из одной строки. В этом случае оно является истинным, если строка не пустая.
      Если строка2 заключена в "/", то условие истинно, если в строке1 встретится хоть одно вхождение строки2.
      Для группирования условий используются скобки.
      Операторы сравнения:
      == равно
      != не равно
      < меньше
      > больше
      !< не меньше
      !> не больше
      пример:
      Вы используете браузер:
      <!--#if expr="$HTTP_USER_AGENT=/Nav/" -->
      Netscape Navigator
      <!--#elif expr="$HTTP_USER_AGENT=/MSIE/ || $HTTP_USER_AGENT=/Mozilla/" -->
      Internet Explorer
      <!--#else --> Не определен (<!--#echo var="HTTP_USER_AGENT" -->)
      <!--#endif -->

      выведет тип вашего браузера

    • #break

    • Остановка вывода.
    • #email

    • Отправляет письмо, содержание которого задано атрибутом message, по адресу, определенному атрибутом toaddress, если данный адрес и host, заданный атрибутом tohost (данный атрибут может отсутствовать), реально существует.
      пример:
      <!--#email tohost="www.greentown.narod.ru" message="Thanks" toaddress="valery@ropnet.ru" subject="SSI"-->
  • Переменные окружения.
  • Переменные CGI

    • DOCUMENT_ROOT
    • GATEWAY_INTERFACE

    • Имя и версия CGI web-сервера
    • HTTP_ACCEPT

    • Разделенный запятыми список MIME-типов, понимаемых браузером клиента
    • HTTP_ACCEPT_ENCODING

    • HTTP_ACCEPT_LANGUAGE

    • Список языков, доступных браузеру клиента
    • HTTP_CONNECTION

    • HTTP_HOST

    • HTTP_USER_AGENT

    • Имя браузера клиента
    • REMOTE_ADDR

    • IP адрес удаленного клиента
    • REMOTE_PORT

    • SCRIPT_FILENAME

    • SCRIPT_NAME

    • Имя программы для выполнения в CGI запросе
    • SERVER_ADMIN

    • Почтовый адрес администратора web-сервера
    • SERVER_NAME

    • Имя компьютера, на котором работает web-сервер
    • SERVER_PORT

    • IP порт WWW (HTTP) сервера
    • SERVER_PROTOCOL

    • Имя и версия HTTP сервера (name/version)
    • SERVER_SIGNATURE

    • SERVER_SOFTWARE

    • Название программы web-сервера
    • QUERY_STRING

    • Строка, полученная от клиента
    • REQUEST_METHOD

    • Тип метода запроса к серверу
    • REQUEST_URI

    Переменные SSI
    • DATE_GMT

    • Текущее время по Гринвичу (GMT, Greenwich Mean Time)
    • DATE_LOCAL

    • Местное время и дата
    • DOCUMENT_NAME

    • Имя документа, запрошенного клиентом
    • DOCUMENT_URI

    • Путь к документу от базовой директории сервера
    • LAST_MODIFIED

    • Дата последнего изменения документа
    Сайт управляется системой uCoz