На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » Сайтостроительство » Web-программирование

Bведение в SSI

У всех, кто когда-либо начинал более или менее серьёзно заниматься созданием вебстраниц, обязательно возникала мысль - а как неплохо бы было, если бы повторяющиеся фрагменты HTML-кода можно было бы писать только по одному разу - чтобы затем они вставлялись бы в нужные места страниц автоматически. Самые продвинутые пытались воспользоваться Java-скриптами, чтобы добиться этого - но тогда страницы начинали растекаться жиром на десятки килобайт, а браузеры посетителей захлёбывались в сложном и обьёмном коде скриптов.

Между тем решение проблемы давно уже было - правда клиентам бесплатных хостингов оно не было доступно. На Webservis.ru оно есть и зовут его "SSI" - "Server Side Includes".

Перевести это можно, в принципе, как «сборкой страниц занимается вебсервер».

Назначение технологии SSI - указать вебсерверу, какой фрагмент взять, и куда его приткнуть, прежде чем выдать его посетителю страницы. Так, ни на одной моей странице нет кода, который отвечает за показывание баннера - а вы его видите, и не один, а даже два. Просто на каждой из моих страниц вверху и внизу есть фрагмент <!--#include virtual="fragments/banner.html"-->. Когда ваш браузер попросил у вебсервера Webservis.ru страницу, на которой вы сейчас находитесь, сервер обнаружил эту метку в тексте страницы. В ней содержится указание взять из подкаталога Fragments файл banner.html и вставить его вместо этой метки. Поэтому если мне вдруг когда нибудь захочется поменять баннер, мне будет достаточно изменить один только файл banner.html - а менять все страницы не понадобится совершенно.

Ещё одно возможное применение 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 (название основной папки для вебстраниц на сервере, обычно ваша папка public_html и путь к ней),
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 (почтовый адрес владельца сервера, указанный при установке. Когда вы регистрируетесь, имя созданного для вас на Webservis.ru ящика прописывается там),
DATE_LOCAL (сегодняшниее время и дата в вашем часовом поясе),
DATE_GMT (то же, но по Гринвичу),
LAST_MODIFIED (дата и время последнего обновления страницы)
 
Никаких параметров у этой SSI-команды нет. Просто <!--#printenv -->.
 
То, что выводит эта команда, когда её обрабатывает сервер Webservis.ru, работающий на Unix и вебсервер, который, быть может, вам захочется установить для тестирования сайта на ваш домашний компьютер под Windows, отличается на добрых две трети. Учитывайте это!

#echo var

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

#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

Ну что, насколько меньше этот фрагмент скрипта на Java, который делает то же самое? А главное это то, что всеми этими условиями занимается сервер, а посетителю страницы выдаётся готовый результат - и он, в отличие от случая с JavaScript, когда он может посмотреть код скрипта, даже не знает, что что-то делалось со страницей.

Поэкспериментируйте с SSI - и через некоторое время вы увидите, как он облегчает жизнь. Размеры страниц поуменьшатся за счёт того, что вы избавитесь от повторения общих для всех страниц фрагментов, да и затраты времени на изменения в страницах будут поменьше.

Единственное, о чём стоит помнить, так это о том, что лучше не использовать SSI-команды при создании страниц в редакторах типа Front Page - они их обычно не понимают и выкидывают, и о том, что одну SSI-команду нельзя вызвать из другой (как нельзя вызвать SSI-команду из скрипта, и (скажу, забегая вперёд) скрипт из скрипта).

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

Спонсор раздела

Рассылки Subscribe.ru:

Библиотека сайтостроительства - новости, статьи, обзоры
Дискуссионный лист для web-разработчиков
Подписка на MailList.Ru
Автор: NunDesign
Другие разделы
Оптимизация сайтов
Web-студии
» Новое в разделе
Web-дизайн
Web-программирование
Интернет-реклама
Раскрутка сайта
Web-графика
Flash
Adobe Photoshop
Рассылка
Инструменты вебмастера
Контент для сайта
HTML/DHTML
Управление web-проектами
CSS
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100