<-
Apache > HTTP Server > Documentation > Version 2.0 > How-To / Tutorials

Apache Обучающая программа: Введение в Сторону Сервера Включает

сторона сервера включает, обеспечивают средство добавить динамическое содержание к существующим документам HTML.

top

Introduction

эти дела статьи со Стороной Сервера Включают, обычно названный просто ПЕРВАЯ СТЕПЕНЬ ИНТЕГРАЦИИ. В этой статье, я буду говорить о конфигурировании вашего сервера, чтобы разрешить ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ, и ввести немного основных методов ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ для того, чтобы добавить динамическое содержание к вашим существующим страницам HTML.

в последней части статьи, мы будем говорить о некоторых из несколько более передовых вещей, которые могут быть сделаны с ПЕРВОЙ СТЕПЕНЬЮ ИНТЕГРАЦИИ, типа условных утверждений в ваших директивах ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ.

top

What are SSI?

ПЕРВАЯ СТЕПЕНЬ ИНТЕГРАЦИИ (Сторона Сервера Включает) - директивы, которые помещены в страницы HTML, и оценены на сервере, в то время как страницам служат. Они позволяют Вам добавлять динамически произведенное содержание к существующей странице HTML, не имея необходимость служить всей странице через программу CGI, или другую динамическую технологию.

решение того, когда использовать ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ, и когда произвести вашу страницу полностью в соответствии с некоторой программой, является обычно вопросом того, сколько из страницы является статическим, и насколько потребности, которые будут повторно вычислены каждый раз странице служат. ПЕРВАЯ СТЕПЕНЬ ИНТЕГРАЦИИ - большой способ добавить маленькие информации, типа текущего времени. Но если большинство вашей страницы производится в то время, когда этому служат, Вы должны искать некоторое другое решение.

top

Configuring your server to permit SSI

чтобы разрешать ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ на вашем сервере, Вы должны иметь следующую директиву любой в вашем httpd.conf файл, или в a .htaccess файл:

Options +Includes

это говорит Apacheу, что Вы хотите разрешить файлам быть разобранными для директив ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ. Отметьте, что большинство конфигураций содержит многократный Options директивы, которые могут отвергнуть друг друга. Вы будете вероятно должны примениться Options к определенному справочнику, где Вы хотите ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ, позволил, чтобы уверить, что это оценено последнее.

не только любой файл разобран для директив ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ. Вы должны сказать Apacheа, какие файлы должны быть разобраны. Есть два способа сделать это. Вы можете сказать Apacheу разбирать любой файл со специфическим расширением файла, типа .shtml , со следующими директивами:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

одно неудобство к этому подходу - то, что, если бы Вы хотели добавить директивы ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ к существующей странице, Вы должны были бы изменить название той страницы, и всех связей к той странице, чтобы дать этому a .shtml расширение, так, чтобы те директивы были бы выполнены.

другой метод должен использовать XBitHack директива:

XBitHack on

XBitHack говорит Apache разбирать файлы для директив ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ, если они имеют выполняющийся набор бита. Так, чтобы добавлять директивы ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ к существующей странице, вместо того, чтобы иметь необходимость изменять название файла, Вы только должны были бы сделать файл выполнимым использованием chmod .

chmod +x pagename.html

краткий комментарий о, что не сделать. Вы будете иногда видеть, что люди рекомендуют, чтобы Вы только сказали Apacheу разбирать все .html файлы для ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ, так, чтобы Вы не должны замарали с .shtml названия файла. Эти люди возможно не услышали о XBitHack . вещь, чтобы иметь в виду - то, что, делая это, Вы требуете, чтобы Apache прочитал быстро через каждый отдельный файл, который это отсылает клиентам, даже если они не содержат никаких директив ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ. Это может замедлить вещи весьма немного, и не хорошая идея.

конечно, на Windows, нет такой вещи как выполняющийся бит, чтобы установить, так, чтобы пределы ваши варианты немного.

в его конфигурации по умолчанию, Apache не посылает последнюю измененную дату или удовлетворяет длину удары головой HTTP на страницах ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ, потому что эти ценности трудны вычислить для динамического содержания. Это может препятствовать вашему документу быть припрятавшимся про запас, и приводить медленнее к воспринятой работе клиента. Есть два способа решить это:

  1. использование XBitHack Full конфигурация. Это говорит Apacheу определять последнюю измененную дату, смотря только во время первоначально требуемого файла, игнорируя дату модификации любых включенных файлов.
  2. использовать директивы, обеспеченные mod_expires установить явное время истечения на ваших файлах, таким образом позволяя браузерам и полномочиям знают, что приемлемо припрятать их про запас.
top

Basic SSI directives

директивы ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ имеют следующий синтаксис:

<!--#element attribute=value attribute=value ... -->

это форматировано как комментарий HTML, так, если Вам не позволяли ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ правильно, браузер будет игнорировать это, но это все еще будет видимо в источнике HTML. Если Вам формировали ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ правильно, директива будет заменена ее результатами.

элемент может быть одной из множества вещей, и мы будем говорить еще некоторые о большинстве из них в следующем взносе этого ряда. Пока, вот - некоторые примеры того, что Вы можете сделать с ПЕРВОЙ СТЕПЕНЬЮ ИНТЕГРАЦИИ

Today's date

<!--#echo var="DATE_LOCAL" -->

echo элемент только выкладывает ценность переменной. Есть множество стандартных переменных, которые включают целый набор переменных окружающей среды, которые являются доступными для программ CGI. Кроме того, Вы можете определить ваши собственные переменные с set элемент.

если Вы не любите формат, в котором напечатана дата, Вы можете использовать config элемент, с a timefmt признак, чтобы изменить то форматирование.

<!--#config timefmt="%A %B %d, %Y" -->
Today is <!--#echo var="DATE_LOCAL" -->

Modification date of the file

This document last modified <!--#flastmod file="index.html" -->

этот элемент также подчинен timefmt конфигурации формата.

Including the results of a CGI program

это - одно из более общих использований ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ - к продукции результаты программы CGI, типа общего фаворита, "прилавка хита."

<!--#include virtual="/cgi-bin/counter.pl" -->

top

Additional examples

следующее - некоторые определенные примеры вещей, которые Вы можете сделать в ваших документах HTML с ПЕРВОЙ СТЕПЕНЬЮ ИНТЕГРАЦИИ.

When was this document modified?

ранее, мы упоминали, что Вы могли использовать ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ, чтобы сообщить пользователю, когда документ был последний раз изменен. Однако, фактический метод для того, чтобы делать, который оставляли несколько рассматриваемым. Следующий кодекс, помещенный в ваш документ HTML, поместит такой отпечаток времени в вашу страницу. Конечно, Вы должны будете позволить ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ правильно, как обсуждено выше.

<!--#config timefmt="%A %B %d, %Y" -->
This file last modified <!--#flastmod file="ssi.shtml" -->

конечно, Вы будете должны заменить ssi.shtml с фактическим названием файла, к которому Вы обращаетесь. Это может быть неудобным, если Вы только ищете родовую часть кодекса, который Вы можете приклеить в любой файл, таким образом Вы вероятно хотите использовать LAST_MODIFIED переменная вместо этого:

<!--#config timefmt="%D" -->
This file last modified <!--#echo var="LAST_MODIFIED" -->

для большего количества деталей относительно timefmt формат, пойдите в ваш любимый участок поиска и искать strftime . синтаксис - то же самое.

Including a standard footer

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

Используя включающийся файл для удара головой и/или нижней сноски может уменьшить бремя этих обновлений. Вы только должны сделать один файл нижней сноски, и затем включить это в каждую страницу с include команда ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ. include элемент может определить какой файл включить с любым file признак, или virtual признак. file признак - дорожка файла, относительно текущего справочника . это означает, что это не может быть абсолютная дорожка файла (начинающийся с/), и при этом это не может содержать ../как часть той дорожки. virtual признак вероятно более полезен, и должен определить URL относительно служившего документа. Это может начаться с/, но должно быть на том же самом сервере как служивший файл.

<!--#include virtual="/footer.html" -->

я буду часто комбинировать последние две вещи, помещая a LAST_MODIFIED директива в файле нижней сноски, который будет включен. Директивы ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ могут содержаться во включенном файле, и включают, может быть вложен - то есть, включенный файл может включить другой файл, и так далее.

top

What else can I config?

в дополнение к тому, чтобы быть в состоянии к config формат времени, Вы можете также config две других вещи.

обычно, когда кое-что идет не так, как надо с вашей директивой ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ, Вы получаете сообщение

[an error occurred while processing this directive]

если Вы хотите изменить то сообщение на что - то еще, Вы можете сделать так с errmsg приписать config элемент:

<!--#config errmsg="[It appears that you don't know how to use SSI]" -->

Хотелось бы надеяться, конечные пользователи никогда не будут видеть это сообщение, потому что Вы решите все проблемы с вашими директивами ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ прежде, чем ваш участок идет живой. (Право?)

и Вы можете config формат, в котором размеры файла возвращены с sizefmt признак. Вы можете определить bytes для полного счета в байтах, или abbrev для сокращенного числа в КБ или МБ, как соответствующий.

top

Executing commands

я ожидаю, что я буду иметь статью некоторым временем в ближайшие месяцы об использовании ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ с маленькими программами CGI. Пока, вот - что - то еще, что Вы можете сделать с exec элемент. Вы можете фактически иметь ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ, выполняют команду, используя снаряд ( /bin/sh , чтобы быть точным - или снаряд ДОСА, если Вы находитесь на Win32). Следующий, например, даст Вам директивное внесение в список.

<pre>
<!--#exec cmd="ls" -->
</pre>

или, на Windows

<pre>
<!--#exec cmd="dir" -->
</pre>

Вы могли бы заметить некоторое странное форматирование с этой директивой по Windows, потому что продукция от dir содержит вереницу ``< dir > "в этом, которое путает браузеры.

отметить, что эта особенность чрезвычайно опасна, поскольку это выполнит любой кодекс, случается, вложенный в exec признак. Если Вы имеете какую-нибудь ситуацию, где пользователи могут редактировать содержание на ваших веб-страницах, типа с "guestbook", например, удостоверьтесь, что Вы имеете этих инвалидов особенности. Вы можете позволить ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ, но не exec особенность, с IncludesNOEXEC аргумент Options директива.

top

Advanced SSI techniques

в дополнение к выкладыванию содержания, Apache ПЕРВАЯ СТЕПЕНЬ ИНТЕГРАЦИИ дает Вам выбор урегулирования переменных, и использования тех переменных на сравнениях и conditionals.

Caveat

большинство особенностей, обсужденных в этой статье только доступно для Вас, если Вы управляете Apache 1.2 или позже. Конечно, если Вы не управляете Apache 1.2 или позже, Вы должны модернизировать немедленно, если не скорее. Продолжить. Сделайте это теперь. Мы будем ждать.

Setting variables

Используя set директива, Вы можете установить переменные для более позднего использования. Мы будем нуждаться в этом позже в обсуждении, таким образом мы будем говорить об этом здесь. Синтаксис этого следующие:

<!--#set var="name" value="Rich" -->

в дополнение к простому урегулированию ценностей буквально как этот, Вы можете использовать любую другую переменную, включая environment variables или переменные, обсужденные выше (как LAST_MODIFIED , например), чтобы дать ценности вашим переменным. Вы определите, что кое-что - переменная, а не буквальная вереница, при использовании долларового признака ($) перед названием переменной.

<!--#set var="modified" value="$LAST_MODIFIED" -->

чтобы поместить буквальный долларовый признак в ценность вашей переменной, Вы должны избежать долларового признака с наклонной чертой влево.

<!--#set var="cost" value="\$100" -->

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

<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->

Conditional expressions

теперь, когда мы имеем переменные, и в состоянии установить и сравнивать их ценности, мы можем использовать их, чтобы выразить conditionals. Это позволяет ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ быть крошечным языком программирования видов. mod_include обеспечивает if , elif , else , endif структура для того, чтобы строить условные утверждения. Это позволяет Вам эффективно производить многократные логические страницы из одной фактической страницы.

структура этой условной конструкции:

<!--#if expr="test_condition" -->
<!--#elif expr="test_condition" -->
<!--#else -->
<!--#endif -->

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

в вашем файле конфигурации, Вы могли поместить следующую линию:

BrowserMatchNoCase macintosh Mac
BrowserMatchNoCase MSIE InternetExplorer

это установит переменные окружающей среды "Макинтош" и "InternetExplorer" к истинному, если клиент будет управлять Internet Explorer на Макинтоше.

тогда, в вашем ПОЗВОЛЕННОМ ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ документе, Вы могли бы сделать следующее:

<!--#if expr="${Mac} && ${InternetExplorer}" -->
Apologetic text goes here
<!--#else -->
Cool JavaScript code goes here
<!--#endif -->

Не то, чтобы я имею что - нибудь против ТО ЕСТЬ на Macs - я только боролся в течение нескольких часов на прошлой неделе, пробуя получить некоторый воздействующий JavaScript ТО ЕСТЬ на Макинтоше, когда это работало всюду еще. Вышеупомянутое было временной работой.

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

top

Conclusion

ПЕРВАЯ СТЕПЕНЬ ИНТЕГРАЦИИ - конечно не замена для CGI, или других технологий, используемых для того, чтобы произвести динамические веб-страницы. Но это - большой способ добавить маленькие количества динамического содержания к страницам, не делая много дополнительной работы.