Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #27, ФЕВРАЛЬ 2003 г.

SSI - НЕ ТОЛЬКО КИРПИЧИКИ ДЛЯ САЙТА

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #027, стр. 027-036-1


Сейчас даже некоторые бесплатные хостинги дают возможность использовать SSI. А использовать SSI при создании больших сайтов со сложной структурой сам Бог велел. Их использование может сильно облегчить тебе жизнь при изменении структуры или контента сайта.

ЧТО ЭТО?

SSI это аббревиатура, которая расшифровывается как Server Side Include (включения на стороне сервера). Эта технология, которая позволяет не только использовать несколько файлов при формировании html документа для вывода пользователю, но и работать с переменными сервера и даже выполнять скрипты.

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

ЗАМОРОЧКИ С РАСШИРЕНИЯМИ

Чтобы не задавать в конференциях глупых вопросов типа:

- У меня <!--#include virtual="myfile.txt"--> не работает...

- А какое расширение у файла?

- html...

Запомни, что Apache по умолчанию обрабатывает документы с расширением shtml, а виндовый IIS - stm.

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

AddType text/html .shtml

AddOutputFilter INCLUDES .shtml

и добавить в них нужные расширения файлов.

К сожалению, для php-файлов нельзя юзать SSI-инструкции без заморочек. В PHP есть функции include() и require(), действие которых аналогично <!--#include.

Для IIS все значительно проще: ему по барабану, так что пусть все твои файлы с html-кодом, SSI-инструкциями имеют расширение .asp. В скорости обработки файлов ты не потеряешь, а головная боль от некорректных расширений файлов исчезнет навсегда.

КТО ПОСЛЕДНИЙ?

Запомни только, что SSI-инструкции сервер обрабатывает раньше скрипт-кода. И маза типа

Response.Write("<!--#include virtual = "inc/menu.aspl" -->")

есть бредятина. Для использования вставки инклудов по условию юзай закрывающие и открывающие дескрипторы кода. Например:

<%if Condition1 then%>

<!--#include virtual="inc/test1.asp"-->

<%elseif Condition2 then%>

<!--#include virtual="inc/test2.asp"-->

<%else%>

<!--#include virtual="inc/test3.asp"-->

<%end if%>

СИНТАКСИС

Синтаксис SSI-инструкций одинаков для всех серверов:

<!--#ssi_инструкция[пробел]=[пробел]"параметры"[пробел]-->.

Обязательно следи, чтобы в инструкции не было лишних пробелов и регистр команд был нижним. IIS корректно обработает инструкцию и с пробелами, и с верхним регистром команд, а Apache выдаст сообщение об ошибке.

Содержание  Вперед на стр. 027-036-2