[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / SSI /

Сайт по кирпичикам (или все о SSI)

Андрей Князев (kniazev@xakep.ru)

Длинное вступление

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

И тут на помощь может придти довольно простой, но в то же время чрезвычайно мощный инструмент. Имя ему - Server Side Includes, сокращенно - SSI. Наиболее естественно и полно поддержка SSI традиционно реализована в web-сервере Apache, впрочем и во всех остальных Web-серверах (Netscape, MS IIS и проч.) она тоже наличествует.

Для чего может быть полезен SSI? Самый простой пример. Предположим, решил ты, знатный наш перец, удивить мир своим сайтом. Все бы хорошо, да вот только FrontPage издох, хомяк (HomeSite) умер с перепоя и остался ты один в этом мире, одинешенек. Одна надежда, что ручки шаловливые выведут. И они таки выведут. Но только в том случае, если сайт не большой или обновления на сайте - раз в пятилетку. Правда, это уже не сайт, а похоронная контора, но об этом позже. Сайт должен быть большим, интересным, живым и обновляемым.

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

А теперь представь себе кошмар, когда один раздел добавился, а другой умер, баннерную сеть надо срочно менять, а с другом ты разругался в дребадан и его поганую кнопку (чтоб он всю жизнь во FrontPage Express сайты ваял) ты хочешь выкинуть с сайта раз и навсегда. При этом на сайте, ну, хотя бы с 50 страниц есть. Вопрос - сколько файлов в каждом случае придется изменять?

Неправильный ответ - 50. Правильный ответ - 1. Но только в том случае, если используются SSI.

Наверное, пора перестать темнить и рассказать, что к чему. :)

Да будет свет!

Все дело в том, что технология SSI позволяет вставлять в гипертекстовый документ "внешние" файлы. Т.е. - я делаю шаблон страницы, а в нем, с помощью однотипных команд, идет отсылка на несколько блоков - кирпичиков. Один блок служит - для заголовка, один - для меню, еще один - для кнопок, да еще два (побольше, побольше) - на рекламу. И так из этих кирпичиков страница и собирается.

Файлы, сделанные с применением SSI, обычно имеют расширение .shtml. "Лишняя" "S" в начале расширения говорит серверу, что в документе могут быть SSI инструкции. И сервер тогда их в состоянии грамотно обработать.

Таким образом получается, что к тому, кто страницы смотрит, уходит точно такой же объем кода, но при этом трудоемкость модификации и создания новых страниц для их автора заметно уменьшается.

Что ж, я нарисовал замечательную перспективу, но настырные голоса вопиют - "Show me the money", т.е. объясни, как же это все делается. Рассказываю...

Синтаксис 1

Главный оператор, которым придется пользоваться чаще всего - это "include". В общем случае SSI директива имеет вид: <!--#include virtual="myfile.txt"-->.

<!-- --> - это стандартный комментарий (если вдруг сервер не сможет распознать команду или не поддерживает ее, то она просто будет пропущена);

#include - собственно сама команда;

virtual - указывает на "вид" пути к файлу;

myfile.txt - имя вставляемого файла.

Естественно, что имя у включаемого файла может быть любым - с любым расширением (или без оного). Главное, - это "начинка" файла. Совершенно понятно, :) что это должен быть HTML.

Касательно "вида" пути (команда virtual). Если сервер проектируется для Web'a (скорее всего), то эта команда именно так и выглядит. Это, конечно, накладывает некоторые ограничения на то, чтобы удобно разместить вкладываемый файл. В этой команда нельзя применять гиперссылки (хотя это в любом случае дурной тон).

Однако иногда бывает полезно показать работу сайта непосредственно на "рабочем" компьютере, и тогда можно (нужно) использовать вместо virtual команду file. При этом адрес можно задавать в виде абсолютного адреса (C:VasyaPupkinSiteXXXmyfile.txt). Но это все-таки экзотика.

В общем случае на команде virtual и заканчивается общепринятое использование Server Side Includes - Включений на стороне сервера. И, наверное, это справедливо - что еще нужно знать, чтобы собирать сайт из кусочков?

Но для тех, кто понимает толк в сайтостроительстве, самое интересное начинается там, где останавливаются все остальные.

Так давайте на всю катушку использовать те возможности, которые дает SSI (а их, поверьте мне, не мало).

Синтаксис 2

Условно говоря, у SSI есть две большие области применения: первая - это вставлять внешние файлы, а вторая - вставлять так называемые "переменные окружения".

Делается это командой вида: <!--#echo var="echo_command"-->, где echo_command - переменная величина и может принимать порядка 30 значений. Все я толковать не буду (справочник по SSI можно найти на Web'е без труда), но самые важные - обязательно:

<!--#echo var="DOCUMENT_NAME"--> - выдаст на экран локальное имя текущего документа, к примеру: "ya_garni_peretz.htm" (очень полезен для тех, у кого частый склероз);

<!--#echo var="DOCUMENT_URL"--> - покажет локальный путь к документу, считая от корневой директории Web-сервера, т.е. адрес типа: /win/mydocs/ssi-tutor/baklan.htm.

<!--#echo var="DATE_LOCAL"--> - выведет текущие, локальные дату и время;

<!--#echo var="LAST_MODIFIED"--> - покажет дату последней правки текущего файла;

<!--#echo var="REMOTE_ADDR"--> - выведет ip вошедшего на страницу;

<!--#echo var="REMOTE_HOST"--> - выведет имя компьютера гостя. Очень простой трюк для определения - работает ли компьютер с использованием в настройках proxy: зайти на свою собственную страницу и прочитать адрес, полученный в ответ на команду REMOTE_HOST.

<!--#echo var="SERVER_SOFTWARE"--> - имя используемого провайдером HTTP сервера; иногда это бывает очень полезно знать; :)

<!--#echo var="SERVER_NAME "--> - имя компьютера, на котором работает web-сервер; тоже небезынтересно знать; :)

<!--#echo var="HTTP_USER_AGENT"--> - одна из самых любимых команд - позволяет определить тип браузера посетителя;

<!--#echo var="HTTP_REFERER"--> - показывает URL, откуда "клиент" пришел (иногда может быть полезна для того, чтобы определить "скрытый" адрес);

<!--#echo var="GATEWAY_INTERFACE"--> - фактически дает версию CGI ПО провайдера.

С помощью SSI, не прибегая к скриптам на Яве и прочим Общим Шлюзовым (cgi) прибамбасам, можно легко и непринужденно делать на странице сообщения типа:

Всем большой хай!

Сегодня у нас Sunday, 27-Feb-2000 20:30:07 Московское время (зима).

Последний раз этот документ был изменен Monday, 21-Feb-2000 23:00:00 MSK.

Твой IP адрес, незнакомец: 193.233.5.100

На моем сервере используется такое ПО, как: Apache/1.3.9 (Unix) PHP/3.0.6 mod_perl/1.16_02

Для просмотра ты, странник, используешь Mozilla/4.0 (compatible; MSIE 4.02; Windows NT). Must DIE! / Rulezzz forever!

А пришел ты сюда со странички: www.super-world-porno.com/uti-puti.htm.

Стоит показать такую страницу всем своим друзьям, как они тут же тебя убоятся. Шутка ли, столько о них узнать. :)

Для особо пытливых приведу полный список echo-команд (в алфавитном порядке): "ACCEPT_LANGUGE", "AUTH_TYPE", "DATE_GMT", "DATE_LOCAL", "DOCUMENT_NAME", "DOCUMENT_URI", "CONTENT_LENGTH", "CONTENT_TYPE", "GATEWAY_INTERFACE", "HTTP_ACCEPT", "HTTP_COOKIE", "HTTP_FORWARDED", "HTTP_FROM", "HTTP_REFERER", "HTTP_USER_AGENT", "LAST_MODIFIED", "PATH_INFO", "PATH_TRANSLATED", "QUERY_STRING", "QUERY_STRING_UNESCAPED", "REMOTE_ADDR", "REMOTE_HOST", "REMOTE_IDENT", "REMOTE_USER", "REQUEST_METHOD", "SCRIPT_NAME", "SERVER_NAME", "SERVER_PORT", "SERVER_PROTOCOL", "SERVER_SOFTWARE".

Кто-то скажет, - "и это все?". Нет! На этом чудеса SSI еще не заканчиваются.

Приведу еще несколько любопытных и полезных команд.

Email. В простейшем варианте позволяет отправить заранее составленное сообщение на заранее определенный адрес.

Пример: <!--#email tohost="xakep.ru" message="You made the coolest magazine, that people ever made!" toaddress="test@xakep.ru" subject="SSI is coolest tool in the world, ya-ba-da-ba-doo!"-->.

Параметров у этой команды, конечно, больше, чем приведенные здесь. Здесь указаны только 4 необходимых (обязательных) команды: tohost - на какой хост (почтовый сервер) отправить письмо, message - текст самого послания, toaddress - почтовый адрес, на какой слать письмо, и последнее - subject, легко догадаться - тема письма.

Понятно, что при таком синтаксисе команды письмо будет отправляться каждый раз при заходе посетителя на страницу с этой командой.

Точно таким же образом можно использовать эту команду в ответе на заполнение формы (форму можно отправлять на анонимный адрес, а письмо с уведомлением на более реальный. :)

Fsize. Команда выводит в текущий документ размера указанного файла.

Пример: <!--#fsize virtual="../log-file.txt"-->.

Может быть полезна для удаленного контроля размера лога или еще для каких целей.

Flastmod. Эта команда позволяет включить в документ дату последней модификации любого доступного файла.

Пример: <!--#flastmod virtual="mysuperfile.htm"-->.

В отличие от echo-команды, команда Flastmod скажет "всю правду" о любом интересующем файле!

Очень хороший способ для начальников контролировать их нерадивых подчиненных (шучу). Но на самом деле очень удобно - делаешь себе одну страничку, где идет список всех файлов, и после обновлений на сайте смотришь - не перепутал ли чего. :) Оно ведь всяко может быть.

Break. Как легко понять из имени команды, она занимается прерыванием. :) Эта команда, как только она встречается, немедленно и безусловно останавливает дальнейший вывод документа.

Пример: <!--#break -->.

Чрезвычайно проста в использовании и не менее чрезвычайно полезна при отладке важных страниц. Я думаю, ни у кого не возникает сомнений, что страницу на гипертексте тоже можно (и нужно!) отлаживать.

Безусловно, это не все тэги, доступные в синтаксисе SSI. К примеру, за скобками остались такие команды, как exec (позволяет выполнять внешние программы и cgi-скрипты), или сonfig (изменяет вывод таких, к примеру, команд, как fsize, flastmod, позволяя настроить нужный формат выдачи сообщений.

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

Конечно, в SSI кое-что есть от программирования. Но все же большинство команд - статичны. Тем не менее, для тех, кто хочет делать по-настоящему динамически изменяемые страницы, придутся по душе несколько "чисто программистских" операторов, содержащихся в SSI.

Из всех операторов программирования самым важным для нас, безусловно, является оператор IF. В SSI тег IF позволяет осуществлять вывод определенного текста в зависимости от условий.

В общем виде синтаксис команды выглядит так:

if' "<operand1>" <operator> "<operand2>" <operation>.

На месте последней команды "operation" может быть один из операторов: 'goto', 'print', 'error', 'break', 'errorbreak' или 'printbreak'.

Очень простой пример - допустим, нужно показывать что-то использующим определенный браузер и не показывать это остальным - не хрена им не в свое дело лезть.

Пишем:

<!--#if "&&HTTP_USER_AGENT&&" hasstring "Mozilla" goto Mozilllalabel-->

<P>Ты, пацан попал, у тебя неправильный браузер, и здесь ты ничего не увидишь

<!--#goto ="defaultlabel" -->

<!--#label ="Mozilllabel" -->

<P>А ты пацан клевый, и мне очень нравится твой браузер :).

<!--#label ="defaultlabel" -->

(Здесь уже можно ничего не писать). :)

Все просто, просто до безобразия.

Можно использовать IF для того, чтобы сравнивать текст в формах. Т.е. можно проверить идентичность заполнения форм (а вдруг человек ошибся) или напоминать гостю, что какую-то позицию формы он не заполнил. Вежливо и элементарно. :)

В примере выше я использовал два стандартных оператора - goto и label. Надо "осветить" их чуть более подробно.

Goto. Используется в связке с меткой label (см. ниже).

Синтаксис команды: <!--#goto ="<label>"-->

Пример. <!--#goto ="secretlabel" -->

<P>Это увидят только те, кому положено видеть

<!--#label ="secretlabel" -->

<P>А этот текст увидят все, без разбора.

Важное замечание: между символами <!--#goto и знаком "=" обязательно должен стоять пробел.

Label. Соответственно устанавливает метку, которую так щедро используют операторы goto или if..goto.

Синтаксис команды: <!--#label ="<label>"-->

Причем <label> строка из не более чем 51 символ без пробелов.

Наличие метки никак не влияет на форматирование документа.

Важное замечание: так же, как и у оператора goto, между символами <!--#goto и знаком "=" обязательно должен стоять пробел.

Дополнительные замечания

Для отладки сайта самое милое дело - это установить собственный web-сервер. Наиболее естественно это реализовано под юниксами, но и под Вынью есть жизнь. Понятное дело, не стоит устанавливать IIS, какие бы златые горы ни сулила за это Micro$soft. Наиболее рулезным сервером всех времен и народов был и остается Apache. Скачать дистрибутив для Win32 можно зайдя на www.apache.org и выбрав там ближайшее зеркало. Дистрибутив снабжен инсталляшкой, и справиться с его установкой легче легкого.

Все файлы сайта необходимо положить в каталог htdocs внутри директории с Апачем (по умолчанию в этой директории лежат файлы справки к Web-серверу). После этого остается самый "трудный" этап - необходимо сконфигурировать и запустить сервер. Поскольку Апач для win32 кровный брат Апача для юниксов, то вся конфигурация заключается в изменении нескольких текстовых файлов. Всего таких файлов 6, но менять придется 1-2. В любом случае, чтобы подогнать сервер под свои конкретные нужды, лучше почитать разные help'ы, faq'и и manual'ы. Это никогда не повредит.

Для того чтобы включить поддержку SSI в Apache, необходимо проделать следующие манипуляции (все файлы конфигурации лежат внутри директории conf и имеют одноименное расширение):

В файл httpd.conf необходимо будет добавить следующие строки (скорее всего их там нет): :)

AddType text/html .shtml

AddHandler server-parsed .shtml

Это наиболее стандартный ход. Впрочем, вместо .shtml можно написать .html или .phtml - главное, чтобы расширение было идентично расширению, которые использует для обозначения использующих SSI файлов провайдер.

И, естественно, нужно будет включить сам "механизм" вложения, а для этого добавить во все тот же httpd.conf к команде Options слово Includes.

Тогда строка с командой Options может принять вид:

Options Indexes FollowSymLinks Includes.

После всего этого шаманства остается лишь запустить сервер (запустить .bat'ничек под 95-98), либо (NT & Win2000 - читайте инструкцию) сделать Apache службой и запускать его, по мере надобности, как сервис.

Адрес локального сервера имеет вид: http://localhost/, что эквивалентно ip-адресу 127.0.0.1.

Ну и хватит

Так что дело за малым - скачать web-сервер, настроить его, запустить и... - начать ваять свой сайт. Не забывая при этом вовремя его отлаживать и пользоваться при этом всеми современными фичами, которые только есть. Я полагаю, что SSI далеко не устаревшая вещь, так что она нам еще послужит.

Удачи




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / SSI /

SSI - Server-Side Includes - включения на стороне сервера. Практическое использование SSI. Часть 4
21-04-2010   

А вот как выглядит на самом деле файл, который вы воспринимаете, как обычный HTML документ (он сокращен для удобства восприятия):... подробнее

Кол. просмотров: общее - 3486 сегодня - 0

SSI - Server-Side Includes - включения на стороне сервера. Практическое использование SSI. Часть 3
19-04-2010   

Следующий пример иллюстрирует, как с помощью SSI собираются страницы в Кладовой WebClub.ru. Их особенность заключается в наличии повторяющихся блоков одинаково оформленного текста. Достигается это использованием трех шаблонов... подробнее

Кол. просмотров: общее - 3302 сегодня - 0

SSI - Server-Side Includes - включения на стороне сервера. Практическое использование SSI. Часть 2
19-04-2010   

Теперь приведем пример файла, вставляемого в начало каждого документа сервера http://www.citforum.ru/. Особенностью сервера является то, что каждый раздел имеет свой базовый цвет, и все это создается этим единственным файлом... подробнее

Кол. просмотров: общее - 3145 сегодня - 0

SSI - Server-Side Includes - включения на стороне сервера. Практическое использование SSI
19-04-2010   

Первым распространенным применением SSI является внедрение в документ некоего динамического куска разметки... подробнее

Кол. просмотров: общее - 3591 сегодня - 0




  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects