главная продукты downloads форум тех. поддержка

 

Главная страница
 

  www.bousoft.com

   главная страница
   новости СМИ
   ссылки
   о проекте
   добавить в Избранное
   сделать стартовой
 

   наши разработки

   shareware
   freeware
   регистрация
 

справка и FAQ   

   статьи
   книги
   FAQ: WinForms
   FAQ: GDI+
   MS Office
   web-технологии
   wap-технологии
 

   программирование

   visual basic: ActiveX
   visual basic: примеры
   .net framework
   c++
   delphi
   rapidQ
 

   наши компакт-диски

   диск BouSoft #3
   диск Windows PE

Server Side Includes.


Что такое SSI?

 

Давайте начнем с рассмотрения структуры любой страницы этого сайта. Как Вы видите, на каждой странице меняется только текст, а все оформление и навигация на странице одинаковы (за некоторым исключением).

 

На момент запуска сайта в эксплуатацию на нем было уже порядка сотни страниц с одинаковым оформлением, сейчас уже гораздо больше. теперь представьте себе, что мне понадобилось, скажем, изменить панель навигации (например, добавить или удалить один пункт). Если бы все страницы строились только на основе HTML, то мне потребовалось бы открыть каждую страницу в редакторе и заменить один фрагмент кода другим, а затем закачать все исправленные страницы на сервер. Думаю, не надо говорить, сколько это бы отняло времени и денег :). А если бы страниц было несколько тысяч?

 

Если Вы когда-либо занимались созданием и поддержкой своего сайта (даже просто домашней страницы), то наверняка у Вас возникало желание придумать способ вынести повторяющиеся фрагменты кода в отдельные файлы и вставлять их в страницу автоматически при ее загрузке в браузер. Конечно, для этого можно написать скрипт на JavaScript, но это грозит разрастанием объема файла страницы, а если браузер пользователя не поддерживает JavaScript или их поддержка отключена?

 

К счастью, есть более простое решение (правда, оно недоступно на бесплатных хостингах) - Server Side Includes (SSI). Расшифровать это выражение можно как "сборкой страниц занимается веб-сервер". Назначение технологии SSI - показать серверу, какой фрагмент текста нужно взять и куда его поместить. При этом от Вас не требуется писать каких-либо сложных скриптов, вызов нужных фрагментов текста осуществляется одной строчкой кода.

 

Например, на этой странице нет кода панели навигации, расположенной слева. Вместо этого в отведенном для панели месте имеется код: <!--#include virtual="navl.php"-->. Когда Ваш браузер запрашивает у веб-сервера данную страницу, последний анализирует текст страницы и находит приведенный выше код. Этот код указывает серверу, что на его месте должен находиться текст из файла navl.php, расположенного в той же директории. Поэтому если теперь мне понадобится отредактировать навигационную панель, то я буду менять только один файл вместо сотен.

 

Другая возможная область применения SSI - вывод служебной информации о странице. Например, команда <!--#flastmod file="creating-ssi.shtml"--> показывает дату последнего обновления страницы.

 

Синтаксис команд SSI.

 

Все команды SSI вставляются в текст страницы как комментарии, внутри тега <!--# команда="параметры"-->. Отличие от обычного комментария заключается в наличии символа # перед именем команды.

 

Список основных SSI-команд:

#include file

 

Вставляет файл из той же самой папки. Так, <!--#include file="file.txt"> укажет серверу взять файл file.txt и вставить его содержимое в страницу

 

#include virtual

 

В отличие от предыдущей команды эта позволяет вставлять файлы из других папок. Так, <!--#include virtual="kakoj/nibud/file.txt"> укажет серверу взять файл file.txt из подпапки nibud папки kakoj. Как видите, здесь используются относительные пути к файлам.

 

#fsize file

 

Выводит размер файла (формат числа указывается командой config sizefmt). Так <!--#fsize file="creating-ssi.shtml"> выведет значение размера cтраницы, на которой вы сейчас находитесь - 26,576 байт.

 

#flastmod file

 

Выводит дату последнего обновления файла (формат числа указывается с помощью директивы config datefmt).

 

#exec cmd

 

Запускает указанную программу и вставляет выведенные ей строки в текст страницы. Например, <!--#exec cmd="date"-->

 

#exec cgi

 

Запускает указанный скрипт и вставляет результат его работы в страницу. Но лучше пользуйтесь для этого директивой include virtual (exec cgi может иногда не работать). Так, скрипт, который каждый раз выводит новый пример запроса для поиска в правом верхнем углу этой страницы, вызывается у меня командой <!--#include virtual="/cgi-bin/random-example.cgi"-->. Перезагрузите эту страницу, и эта фраза - "установка Perl" , вставляемая скриптом random-example.cgi через SSI-команду include virtual сменится другой.

 

#config errmsg

 

Вы, наверное, нередко встречали фразу "[an error occurred while processing this directive]" на некоторых недоделанных или неправильно работающих сайтах. Эту фразу вебсервер выводит тогда, когда он не может запустить скрипт, если в том содержатся ашипки или очепятки или же этого скрипта просто не существует. Команда config errmsg позволяет заменить эту непонятную фразу на что-нибудь более вменяемое. Советую вставлять первой строкой во все страницы, которые вы создаёте, SSI-команду <!--#config errmsg="[При открытии страницы произошла ошибка. Пожалуйста, сообщите об этом хозяину сайта.]"-->

 

#config timefmt

 

Указывает серверу, в каком формате выдавать дату командой flastmod. По умолчанию это что-то вроде "Sunday, 10-Sep-2000 17:58:59 Московское время (лето)". Вам же может захотеться получить дату в виде день/месяц/год. Для этого с командой config timefmt используется нужное сочетание следующих возможных параметров:

 

Формат Описание Пример
%a Краткое название дня недели Mon
%A Полное название дня недели Monday
%b Аббревиатура названия месяца Dec
%B Полное название месяца December
%d День месяца 01 (не 1)
%D Дата в формате "%m/%d/%y" 12/31/99
%e День месяца 13
%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 Неделя года 16
%w Номер дня недели 4
%y Год в формате ГГ 99
%Y Год в формате ГГГГ 1999
%Z Временная зона MSK

 

Таким образом, команда <!--#config timefmt="%d/%m/%Y, %H:%M:%S"--> укажет серверу выдавать время последнего обновления файла в таком формате - 21/11/2000, 00:42:33, а команда <!--#config timefmt="%d/%m/%y"--> - в таком - 21/11/00.

 

#config sizefmt

 

Изменяет формат вывода значения размера файла. <!--#config sizefmt="abbrev"--> заставляет выводить размер файла в килобайтах ( 26k), а <!--#config sizefmt="bytes"--> - в байтах (26,576)
Обратите внимание на то, что команды #config sizefmt и #config timefmt влияют на все связанные с ними SSI-команды от того места, откуда они были вызваны и до самого конца страницы. Поэтому каждый вызов команд #flastmod и #fsize снабжайте своей командой #config - так проще и спокойнее.

 

#printenv

 

Выводит список так называемых "переменных окружения" ("environment variables") с их значениями. В их числе переменные:


DOCUMENT_ROOT (название основной папки для вебстраниц на сервере),
HTTP_USER_AGENT (название браузера, которым пользуется посетитель),
REMOTE_ADDR (IP-адрес посетителя),
REMOTE_HOST (адрес посетителя в нормальной форме - например, d150.p7.col.ru)
SERVER_ADDR (IP-адрес вашего сайта)
SERVER_NAME и HTTP_HOST (адрес сервера, типа userguide.webservis.ru),
DOCUMENT_URI, REQUEST_URI и SCRIPT_NAME (запрошенная вами страница, типа /examples/mysqlexample.shtml. Сочетание SERVER_NAME и REQUEST_URI даёт привычный вам адрес страницы),
DOCUMENT_NAME (только название файла),
SCRIPT_FILENAME (полный путь к вебстранице на сервере. Например /home/home-webservis/public_html/ и так далее),
SERVER_SOFTWARE (название сервера, например, Apache/1.3.12 (Unix))
SERVER_ADMIN (почтовый адрес владельца сервера, указанный при установке),
DATE_LOCAL (сегодняшниее время и дата в вашем часовом поясе),
DATE_GMT (то же, но по Гринвичу),
LAST_MODIFIED (дата и время последнего обновления страницы)


Никаких параметров у этой SSI-команды нет. Просто <!--#printenv -->.

То, что выводит эта команда, когда её обрабатывает сервер, работающий на Unix и вебсервер, который, быть может, вам захочется установить для тестирования сайта на ваш домашний компьютер под Windows, отличается на добрых две трети. Учитывайте это!

 

#echo var

 

Выводит значение определённой переменной. Например, http://<!--#echo var="HTTP_HOST"--><!--#echo var="DOCUMENT_URI"--> выведет адрес этой страницы.

 

#set var value

 

Присваивает новое значение переменной. Например, <!--#set var="SERVER_ADMIN" value="новый@адрес.ru"-->

 

#if, #elif, #else и #endif

 

Применяется для управления выводом страницы по заданному условию. Синтаксис используется такой:
<!--#if expr="ПЕРВОЕ-УСЛОВИЕ" -->
HTML-код, который будет выводиться, если ВТОРОЕ-УСЛОВИЕ истинно
<--#elif expr="ВТОРОЕ-УСЛОВИЕ" -->
HTML-код, который будет выводиться, если ПЕРВОЕ-УСЛОВИЕ ложно, а ВТОРОЕ-УСЛОВИЕ истинно
<--#else -->
HTML-код, который будет выводиться, если все условия ложны
<--#endif -->

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

Вы пользуетесь браузером
<!--#if expr="$HTTP_USER_AGENT=/MSIE/ ||
$HTTP_USER_AGENT=/Microsoft/" -->
Microsoft Internet Explorer
<!--#elif expr="$HTTP_USER_AGENT=/Opera/" -->
Opera
<!--#elif expr="$HTTP_USER_AGENT=/Mozilla/" -->
Netscape Navigator
<!--#else -->
неизвестной мне марки
<!--#endif -->


Такой фагмент выведет:

Вы пользуетесь браузером Microsoft Internet Explorer

 

Как видите, технология SSI позволяет значительно упростить код страницы, уменьшить ее объем и, соответственно, скорость загрузки браузером. Самое главное, что всей обработкой занимается веб-сервер, при этом совершенно не загружаются ресурсы компьютера пользователя, а сам пользователь не узнает об обработке страницы, даже если посмотрит ее код.

 

При работе с SSI Вам, возможно, захочется протестировать создаваемые страницы. Однако не пытайтесь просто открывать их на локальном компьютере - команды SSI может обрабатывать только веб-сервер. Поэтому для тестирования страниц либо загружайте их на сервер, поддерживающий SSI, либо установите веб-сервер на Ваш компьютер для тестирования.
 
   Автор статьи: Буторкин Сергей  Web-сайт: http://www.bousoft.com/.

 

e-mail:

 

bousoft@mail.ru