|
 |
Путь: >
Новичкам
Новичкам
Автор: - Yurik
Дата публикации - 21.05.2005
Просмотров: - 4345
Основы: SSI
[p]Что такое SSI[/p]
Основным, простейшим, но в то же время чрезвычайно мощным инструментом поддержки больших наборов документов является SSI (Server-Side Includes - включения на стороне сервера). Если кто-то из вас знает Си, то он быстро поймет, что SSI чрезвычайно похож на макроязык. С помощью SSI можно не только в зависимости от некоторых условий выводить определенные части документа, не только формировать документ из заранее определенных кусочков, но и вставлять результат работы некоторого CGI сценария или программы прямо в документ.
В стандартном дистрибутиве Apache есть модуль mod_include. Начиная с версии 1.2 он имеет расширенное количество директив и называется - XSSI (eXtended SSI). По умолчанию он включен в компиляцию.
[p]Включение механизма Server-Side Includes[/p]
Любой документ, у которого будет установлен обработчик "server-parsed" будет сканироваться этим модулем, если включена опция "Includes". Если вы имеете малое количество документов с SSI, то лучше всего в файле httpd.conf указать следующее:
[quote][b]AddType[/b] text/html .shtml<br>
[b]AddHandler[/b] server-parsed .shtml[/quote]
и устанавливать у таких файлов расширение .shtml. Если же все или почти все документы будут иметь директивы SSI, то лучше в файле конфигурации указать:
[quote][b]AddHandler[/b] server-parsed .html[/quote]
И не забудьте включить в опции директории узла (Directory, Virtual, .htaccess) опцию Includes:
[quote][b]Options[/b] +Includes[/quote]
Конечно в этой строке могут быть и другие нужные вам опции.
[p]Базовые директивы[/p]
Директивы SSI включаются в HTML документ в виде комментариев (это не мешает вам использовать обычные комментарии). Синтакс команд имеет следующий вид:
[code]<!--#element attribute=value attribute=value ... -->[/code]
Очень часто значение помещается в двойные кавычки. Некоторые команды позволяют иметь только одну пару атрибут-значение. Обратите внимание, что заключительная часть комментария (-->) должна отделяться от директивы пробелом, иначе она будет воспринята, как ее часть.
Рассмотрим определенные в Apache элементы SSI:
- config - контролирует различные аспекты сканирования. Его атрибутами могут быть:
- errmsg - устанавливает сообщение, выводящееся при возникновении ошибки; в большинстве случаев целесообразно установить в пустую строку;
[code]Это стандартная ошибка при запуске скрипта, которого нет:
<!--#exec cgi="/cgi-bin/nonexistence.pl"-->
А теперь заменим сообщение об ошибке и повторим:
<!--#config errmsg="Ошибка, пишите <a href=mailto:dh@null.ru>автору ошибки</a>"-->
<!--#exec cgi="/cgi-bin/nonexistence.pl"--> <BR>
Вывод:
Это стандартная ошибка, возникающая при запуске скрипта, которого нет:
[an error occurred while processing this directive]
А теперь заменим сообщение об ошибке и повторим:
Ошибка, пишите автору ошибки
[/code]
- sizefmt - устанавливает формат, в котором будет выводиться размер файла. Формат соответствует передаваемому библиотечной функции strftime; Директива config sizefmt изменяет формат вывода размера файла.
[code]Размер файла этой страницы в килобайтах:
<!--#config sizefmt="abbrev"-->
<!--#fsize file="ssi.shtml"--> <BR>
Размер файла этой страницы в байтах:
<!--#config sizefmt="bytes"-->
<!--#fsize file="ssi.shtml"--> <BR>
Вывод:
Размер файла этой страницы в килобайтах: 12k
Размер файла этой страницы в байтах: 12,463[/code]
- timefmt - меняет формат вывода даты и времени.
[code]Время модификации файла этой страницы в секундах с 01.01.1970:
<!--#config timefmt="%s"-->
<!--#flastmod file="ssi.shtml"--> <BR>
Время модификации файла этой страницы в читабельном виде:
<!--#config timefmt="%d.%m.%Y %H:%M:%S"-->
<!--#flastmod file="ssi.shtml"--> <BR>
Вывод:
Время модификации файла этой страницы в секундах с 01.01.1970: 961590693
Время модификации файла этой страницы в читабельном виде: 21.06.2000 16:31:33[/code]
Параметры, используемые в config timefmt:
| Формат | Описание | Пример |
| %a | Аббревиатура названия дня недели | Sun |
| %A | Полное название дня недели | Sunday |
| %b | Аббревиатура названия месяца | Jan |
| %B | Полное название месяца | January |
| %d | День месяца | 01 (не 1) |
| %D | Дата в формате "%m/%d/%y" | 01/31/90 |
| %e | День месяца | 1 |
| %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 | Неделя года | 49 |
| %w | Номер дня недели | 5 |
| %y | Год в формате ГГ | 95 |
| %Y | Год в формате ГГГГ | 1995 |
| %Z | Временная зона | MSK |
- echo - выводит значение установленной переменной SSI. Допустимым атрибутом является var.
[code]Твой IP - <!--#echo var="REMOTE_ADDR"--> <BR>
Твой броузер - <!--#echo var="HTTP_USER_AGENT"--> <BR>
Мой сервер - <!--#echo var="SERVER_NAME"--> <BR>
Ты пришел со страницы - <!--#echo var="HTTP_REFERER"--> <BR>
[/code]
- fsize - выводит размер файла в определенном с помощью sizefmt формате. Допустимые атрибуты:
- file - определяет путь к файлу, относительно сканируемого документа;
- virtual - определяет стандартный кодированный URL, относительно сканируемого документа, или, при наличии в начале слеша (/) - относительно корня документов узла.
- flastmod - выводит дату последней модификации файла в определенном с помощью timefmt формате. Атрибуты аналогичны атрибутам fsize.
- include - включает текст другого документа или файла в сканируемый файл. К включаемому файлу применяются все установленные правила ограничения доступа. Если для каталога, из которого включается файл, установлена опция IncludesNOEXEC, и включение данного документа привело бы к запуску программы, то документ не включается, и выводится сообщение об ошибке. CGI сценарии вызываются, как обычно с помощью URL, который может содержать кодированную строку запроса (query string). Положение файла указывается с помощью атрибутов:
- file - указывает путь, относительно сканируемого документа; путь не может содержать ../ и не может быть абсолютным путем; всегда предпочтительнее использовать атрибут virtual;
- virtual - содержит кодированный URL, относительный или абсолютный; URL не может содержать имя протокола или имя хоста, и может содержать строку запроса.
- printenv - выводит содержимое переменных окружения. Вызывается без параметров.
- set - устанавливает значение переменной. Ее атрибутами являются var, определяющий имя переменной, и value, определяющий ее значение.
[p]Переменные включения[/p]
В дополнение к стандартным окружения CGI, модуль SSI делает доступными для директив и условий, а также для вызываемых через SSI сценариев следующие переменные:
- DATE_GMT - текущее время по Гринвичу;
- DATE_LOCAL - текущее локальное (для сервера) время;
- DOCUMENT_NAME - имя файла (без каталогов) документа, запрошенного пользователем;
- DOCUMENT_URI - декодированный URL запрошенного пользователем документа;
- LAST_MODIFIED - дата последней модификации документа, запрошенного пользователем. То есть во вложенном SSI эта переменная будет содержать имя "главного" документа, а не вложенного.
[p]Подстановка переменных[/p]
Подстановка переменных производится внутри заключенных в кавычки строк в большинстве аргументов SSI директив. В этих случаях знак доллара можно вставить, предварив его слешом:
[code]<!--#if expr="$a = \$test" --> [/code]
Для предотвращения двусмысленности можно заключать имя переменной в фигурные скобки:
[code]<!--#set var="Zed" value="${a}bc_${abc}" -->[/code]
В результате такого присвоения переменная Zed будет иметь значение "Xbc_Y", если переменная a равна X, а переменная abc равна Y.
[p]Условные операторы[/p]
Базовыми элементами контроля являются:
[code]<!--#if expr="test_condition" -->
<!--#elif expr="test_condition" -->
<!--#else -->
<!--#endif -->[/code]
Элементы elif и else являются необязательными.
Элемент endif заканчивает элемент if и является обязательным.
test_condition может быть одним из следующих:
- string - истинно, если string не пуста;
- string1 = string2
- string1 != string2
- string1 < string2
- string1 <= string2
- string1 > string2
- string1 >= string2
- истинно, если выполняется условие сравнения. Если string2 имеет форму /string/, то тогда она интерпретируется, как регулятное выражение. Их синтаксис аналогичен синтаксису регулярных выражений в Unix команде egrep;
- ( test_condition ) - истинно, если test_condition истинно;
- ! test_condition - истинно, если test_condition ложно;
- test_condition1 && test_condition2 - истинно, если как test_condition1, так и test_condition2 истинны;
- test_condition1 || test_condition2 - истинно, если хотя бы test_condition1 или test_condition2 истинно.
- "=" и "!=" имеют больший приоритет, чем "&&" и "||", а "!" имеет наивысший приоритет.
Все, что не распознается, как переменная, считается строкой. Если строка имеет пробелы или символы табуляции, то ее надо заключать в кавычки.
Обсудить в ФОРУМе - комментариев ()
Путь: >
Новичкам
Если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
|
|