Файл: work/ssi/index.php
Строк: 478
<?
require '../../config.php';
$title = 'SSI';
include '../../style/head.php';
aut();
who_add(0, 'servise');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>SSI</title>
</head>
<body>
<p align="center"><b><font face="Verdana" color="#000080" size="3">SSI </font></b>
<p><font size="2" face="Verdana">Если вы
прогуляетесь по страницам этого сайта,
вы увидите, что меняются только тексты
страниц и их заголовки - а всё остальное -
детали оформления, меню навигации, форма
для комментариев и строка поиска - всё
это остаётся неизменным.</font>
</p>
<p><font size="2" face="Verdana">На этом сайте около
сотни различных страниц и все они
оформлены одинаково. Но посмотрите, что
пришлось бы сделать, если бы было нужно,
например, изменить вид меню навигации.
Если всё пришлось бы делать "по
старинке", было бы нужно открыть
каждый из сотни файлов, заменить один
фрагмент HTML-кода другим и затем закачать
изменённые страницы на сайт. Однако на
этом сайте "всего лишь" несколько
мегабайт текста. А что пришлось бы
делать, если размер сайта измерялся бы
сотнями мегабайт?</font>
<p><font size="2" face="Verdana">У всех, кто когда-либо
начинал более или менее серьёзно
заниматься созданием вебстраниц,
обязательно возникала мысль - а как
неплохо бы было, если бы повторяющиеся
фрагменты HTML-кода можно было бы писать
только по одному разу - чтобы затем они
вставлялись бы в нужные места страниц
автоматически. Самые продвинутые
пытались воспользоваться Java-скриптами,
чтобы добиться этого - но тогда страницы
начинали растекаться жиром на десятки
килобайт, а браузеры посетителей
захлёбывались в сложном и обьёмном коде
скриптов.</font>
<p><font size="2" face="Verdana">Между тем решение
проблемы давно уже было - правда
клиентам бесплатных хостингов оно не
было доступно. На Webservis.ru оно есть и зовут
его "SSI" - "Server Side Includes".
Перевести это можно, в принципе, как «сборкой
страниц занимается вебсервер».</font>
<p><font size="2" face="Verdana">Назначение технологии
SSI - указать вебсерверу, какой фрагмент
взять, и куда его приткнуть, прежде чем
выдать его посетителю страницы. Так, ни
на одной моей странице нет кода, который
отвечает за показывание баннера - а вы
его видите, и не один, а даже два. Просто
на каждой из моих страниц вверху и внизу
есть фрагмент <b><!--#include virtual="fragments/banner.html"--></b>.
Когда ваш браузер попросил у вебсервера
Webservis.ru страницу, на которой вы сейчас
находитесь, сервер обнаружил эту метку в
тексте страницы. В ней содержится
указание взять из подкаталога Fragments файл
banner.html и вставить его вместо этой метки.
Поэтому если мне вдруг когда нибудь
захочется поменять баннер, мне будет
достаточно изменить один только файл
banner.html - а менять все страницы не
понадобится совершенно.</font>
<p><font size="2" face="Verdana">Ещё одно возможное
применение SSI - с его помощью можно
выводить различную информацию о
странице. Так, команда <b><!--#flastmod file="creating-ssi.shtml"--></b>
вставит в текст страницы число, когда
эта страница последний раз обновлялась.
Точно так же можно выводить название
этой страницы и путь к ней, её размер и
много чего ещё.</font>
<p><font size="2" face="Verdana">Но давайте по порядку.
Итак, как вы могли увидеть, SSI-команды
вставляются в текст страниц, как обычные
комментарии, внутри тэга <nobr><b><!--#SSI-команда="параметры"
--></b></nobr>. Единственное отличие от
простого комментария - в начале должен
обязательно присутствовать символ "#".</font>
<p><font size="2" face="Verdana">Вот список основных SSI-команд:</font></p>
<span align="left">
<h3><font size="2" face="Verdana">#include file</font></h3>
<blockquote>
<font size="2" face="Verdana">Вставляет файл из той
же самой папки. Так, <nobr><b><!--#include file="file.txt"></b></nobr>
укажет серверу взять файл file.txt и
вставить его содержимое в страницу</font>
</blockquote>
<h3><font size="2" face="Verdana">#include virtual</font></h3>
<blockquote>
<font size="2" face="Verdana">В отличие от
предыдущей команды эта позволяет
вставлять файлы из других папок. Так, <nobr><b><!--#include
virtual="kakoj/nibud/file.txt"></b></nobr> укажет
серверу взять файл file.txt из подпапки nibud
папки kakoj. Как видите, здесь
используются относительные пути к
файлам.</font>
</blockquote>
<h3><font size="2" face="Verdana">#fsize file</font></h3>
<blockquote>
<font size="2" face="Verdana">Выводит размер файла (формат
числа указывается командой config sizefmt).
Так <nobr><b><!--#fsize file="creating-ssi.shtml"></b></nobr>
выведет значение размера cтраницы, на
которой вы сейчас находитесь - 26,576 байт.</font>
</blockquote>
<h3><font size="2" face="Verdana">#flastmod file</font></h3>
<blockquote>
<font size="2" face="Verdana">Выводит дату
последнего обновления файла (формат
числа указывается с помощью директивы
config datefmt).</font>
</blockquote>
<h3><font size="2" face="Verdana">#exec cmd</font></h3>
<blockquote>
<font size="2" face="Verdana">Запускает указанную
программу и вставляет выведенные ей
строки в текст страницы. Например, <b><!--#exec
cmd="date"--></b></font>
</blockquote>
<h3><font size="2" face="Verdana">#exec cgi</font></h3>
<blockquote>
<font size="2" face="Verdana">Запускает указанный
скрипт и вставляет результат его
работы в страницу. Но лучше пользуйтесь
для этого директивой include virtual (exec cgi
может иногда не работать). Так, скрипт,
который каждый раз выводит новый
пример запроса для поиска в правом
верхнем углу этой страницы, вызывается
у меня командой <nobr><b><!--#include virtual="/cgi-bin/random-example.cgi"--></b></nobr>.
<a href="javascript:location.reload()">Перезагрузите эту
страницу</a>, и эта фраза - "установка
Perl" , вставляемая скриптом random-example.cgi
через SSI-команду include virtual сменится
другой.</font>
</blockquote>
<h3><font size="2" face="Verdana">#config errmsg</font></h3>
<blockquote>
<font size="2" face="Verdana">Вы, наверное, нередко
встречали фразу "[an error occurred while processing
this directive]" на некоторых недоделанных
или неправильно работающих сайтах. Эту
фразу вебсервер выводит тогда, когда он
не может запустить скрипт, если в том
содержатся ашипки или очепятки или же
этого скрипта просто не существует.
Команда config errmsg позволяет заменить эту
непонятную фразу на что-нибудь более
вменяемое. Советую вставлять первой
строкой во все страницы, которые вы
создаёте, SSI-команду <b><!--#config errmsg="[При
открытии страницы произошла ошибка.
Пожалуйста, сообщите об этом хозяину
сайта.]"--></b></font>
</blockquote>
<h3><font size="2" face="Verdana">#config timefmt</font></h3>
<blockquote>
<font size="2" face="Verdana">Указывает серверу, в
каком формате выдавать дату командой
flastmod. По умолчанию это что-то вроде "<cite>Sunday,
10-Sep-2000 17:58:59 Московское время (лето)</cite>".
Вам же может захотеться получить дату в
виде день/месяц/год. Для этого с
командой config timefmt используется нужное
сочетание следующих возможных
параметров:<br>
</font>
<table border="0" cellpadding="3" cellspacing="1" bgcolor="#003399">
<tbody>
<tr bgcolor="#FFFFFF">
<td><b><font size="2" face="Verdana">Формат</font></b><font size="2" face="Verdana"> </font></td>
<td><b><font size="2" face="Verdana">Описание</font></b><font size="2" face="Verdana"> </font></td>
<td><b><font size="2" face="Verdana">Пример</font></b><font size="2" face="Verdana"> </font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%a</font></td>
<td><font size="2" face="Verdana">Краткое название
дня недели</font></td>
<td><font size="2" face="Verdana">Mon</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%A</font></td>
<td><font size="2" face="Verdana">Полное название
дня недели</font></td>
<td><font size="2" face="Verdana">Monday</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%b</font></td>
<td><font size="2" face="Verdana">Аббревиатура
названия месяца</font></td>
<td><font size="2" face="Verdana">Dec</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%B</font></td>
<td><font size="2" face="Verdana">Полное название
месяца</font></td>
<td><font size="2" face="Verdana">December</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%d</font></td>
<td><font size="2" face="Verdana">День месяца</font></td>
<td><font size="2" face="Verdana">01 (не 1)</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%D</font></td>
<td><font size="2" face="Verdana">Дата в формате
"%m/%d/%y"</font></td>
<td><font size="2" face="Verdana">12/31/99</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%e</font></td>
<td><font size="2" face="Verdana">День месяца</font></td>
<td><font size="2" face="Verdana">13</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%H</font></td>
<td><font size="2" face="Verdana">Часы в 24-часовом
формате</font></td>
<td><font size="2" face="Verdana">13</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%I</font></td>
<td><font size="2" face="Verdana">Часы в 12-часовом
формате</font></td>
<td><font size="2" face="Verdana">01</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%j</font></td>
<td><font size="2" face="Verdana">День года</font></td>
<td><font size="2" face="Verdana">235</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%m</font></td>
<td><font size="2" face="Verdana">Номер месяца</font></td>
<td><font size="2" face="Verdana">01</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%M</font></td>
<td><font size="2" face="Verdana">Минуты</font></td>
<td><font size="2" face="Verdana">03</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%p</font></td>
<td><font size="2" face="Verdana">AM/PM (до полудня/после)</font></td>
<td><font size="2" face="Verdana">AM</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%r</font></td>
<td><font size="2" face="Verdana">Время в формате
"I:M:S p"</font></td>
<td><font size="2" face="Verdana">11:35:46 PM</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%S</font></td>
<td><font size="2" face="Verdana">Секунды</font></td>
<td><font size="2" face="Verdana">34</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%s</font></td>
<td><font size="2" face="Verdana">Время в секундах
с 01.01.1970</font></td>
<td><font size="2" face="Verdana">957228726</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%T</font></td>
<td><font size="2" face="Verdana">Время в формате
"%H:%M:%S"</font></td>
<td><font size="2" face="Verdana">14:05:34</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%U</font></td>
<td><font size="2" face="Verdana">Неделя года</font></td>
<td><font size="2" face="Verdana">16</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%w</font></td>
<td><font size="2" face="Verdana">Номер дня недели</font></td>
<td><font size="2" face="Verdana">4</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%y</font></td>
<td><font size="2" face="Verdana">Год в формате ГГ</font></td>
<td><font size="2" face="Verdana">99</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%Y</font></td>
<td><font size="2" face="Verdana">Год в формате
ГГГГ</font></td>
<td><font size="2" face="Verdana">1999</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td><font size="2" face="Verdana">%Z</font></td>
<td><font size="2" face="Verdana">Временная зона</font></td>
<td><font size="2" face="Verdana">MSK</font></td>
</tr>
</tbody>
</table>
<font size="2" face="Verdana"><br>
Таким образом, команда <b><!--#config timefmt="%d/%m/%Y,
%H:%M:%S"--></b> укажет серверу выдавать
время последнего обновления файла в
таком формате - <i>21/11/2000, 00:42:33</i>, а
команда <b><!--#config timefmt="%d/%m/%y"--></b>
- в таком - <i>21/11/00</i>.</font>
</blockquote>
<h3><font size="2" face="Verdana">#config sizefmt</font></h3>
<blockquote>
<font size="2" face="Verdana">Изменяет формат вывода
значения размера файла. <b><!--#config sizefmt="abbrev"--></b>
заставляет выводить размер файла в
килобайтах (<i> 26k</i>), а <b><!--#config sizefmt="bytes"--></b>
- в байтах (<i>26,576</i>)</font>
</blockquote>
<blockquote>
<font size="2" face="Verdana">Обратите внимание на
то, что команды #config sizefmt и #config timefmt
влияют на все связанные с ними SSI-команды
от того места, откуда они были вызваны и
до самого конца страницы. Поэтому
каждый вызов команд #flastmod и #fsize
снабжайте своей командой #config - так
проще и спокойнее.</font>
</blockquote>
<h3><font size="2" face="Verdana">#printenv</font></h3>
<blockquote>
<font size="2" face="Verdana">Выводит список так
называемых "переменных окружения"
("environment variables") с их значениями. В
их числе переменные:<br>
<br>
<b>DOCUMENT_ROOT</b> (название основной папки
для вебстраниц на сервере, обычно ваша
папка public_html и путь к ней),<br>
<b>HTTP_USER_AGENT</b> (название браузера,
которым пользуется посетитель),<br>
<b>REMOTE_ADDR</b> (IP-адрес посетителя),<br>
<b>REMOTE_HOST</b> (адрес посетителя в
нормальной форме - например, d150.p7.col.ru)<br>
<b>SERVER_ADDR</b> (IP-адрес вашего сайта)<br>
<b>SERVER_NAME</b> и <b>HTTP_HOST</b> (адрес сервера,
типа userguide.webservis.ru),<br>
<b>DOCUMENT_URI</b>, <b>REQUEST_URI</b> и <b>SCRIPT_NAME</b> (запрошенная
вами страница, типа /examples/mysqlexample.shtml.
Сочетание SERVER_NAME и REQUEST_URI даёт
привычный вам адрес страницы),<br>
<b>DOCUMENT_NAME</b> (только название файла),<br>
<b>SCRIPT_FILENAME</b> (полный путь к вебстранице
на сервере. Например /home/home-webservis/public_html/
и так далее),<br>
<b>SERVER_SOFTWARE</b> (название сервера,
например, Apache/1.3.12 (Unix))<br>
<b>SERVER_ADMIN</b> (почтовый адрес владельца
сервера, указанный при установке. Когда
вы регистрируетесь, имя созданного для
вас на Webservis.ru ящика прописывается там),<br>
<b>DATE_LOCAL</b> (сегодняшниее время и дата в
вашем часовом поясе),<br>
<b>DATE_GMT</b> (то же, но по Гринвичу),<br>
<b>LAST_MODIFIED</b> (дата и время последнего
обновления страницы)<br>
<br>
Никаких параметров у этой SSI-команды
нет. Просто <b><nobr><!--#printenv --></nobr></b>.<br>
<br>
То, что выводит эта команда, когда её
обрабатывает сервер Webservis.ru, работающий
на Unix и вебсервер, который, быть может,
вам захочется <a href="http://www.topserver.ru" target="_blank">установить
для тестирования сайта на ваш домашний
компьютер под Windows</a>, отличается на
добрых две трети. Учитывайте это!</font>
</blockquote>
<h3><font size="2" face="Verdana">#echo var</font></h3>
<blockquote>
<font size="2" face="Verdana">Выводит знчение
определённой переменной. Например, <b>http://<!--#echo
var="HTTP_HOST"--><!--#echo var="DOCUMENT_URI"--></b>
выведет адрес этой страницы - <i>http://userguide.webservis.ru/creating-ssi.shtml</i>.</font>
</blockquote>
<h3><font size="2" face="Verdana">#set var value</font></h3>
<blockquote>
<font size="2" face="Verdana">Присваивает новое
значение переменной. Например, <b><!--#set
var="SERVER_ADMIN" value="новый@адрес.ru"--></b></font>
</blockquote>
<h3><font size="2" face="Verdana">#if, #elif, #else и #endif</font></h3>
<blockquote>
<font size="2" face="Verdana">Применяется для
управления выводом страницы по
заданному условию. Синтаксис
используется такой:<br>
<b><!--#if expr="ПЕРВОЕ-УСЛОВИЕ" --><br>
HTML-код, который будет выводиться, если
ВТОРОЕ-УСЛОВИЕ истинно<br>
<--#elif expr="ВТОРОЕ-УСЛОВИЕ" --><br>
HTML-код, который будет выводиться, если
ПЕРВОЕ-УСЛОВИЕ ложно, а ВТОРОЕ-УСЛОВИЕ
истинно<br>
<--#else --><br>
HTML-код, который будет выводиться, если
все условия ложны<br>
<--#endif --></b><br>
<br>
Условие - это либо строка, которая
является истинной, если она непустая,
или набор операторов сравнения строк.
Операторами могут быть <i>=</i>, <i>!=</i>, <i><</i>,
<i><=</i>, <i>></i> и <i>></i>. Если вторая
строка заключена в слэши ("/"), то
условие истинно, если в первой строке
встречается хоть одно вхождение второй
строки. Можно объединять несколько
операторов сравнения с помощью
операторов <i>&&</i> ("AND") и <i>||</i>
("OR"). Для группирования условий
используются скобки. Пример:<br>
<br>
<b>Вы пользуетесь браузером<br>
<!--#if expr="$HTTP_USER_AGENT=/MSIE/ ||<br>
$HTTP_USER_AGENT=/Microsoft/" --><br>
Microsoft Internet Explorer<br>
<!--#elif expr="$HTTP_USER_AGENT=/Opera/" --><br>
Opera<br>
<!--#elif expr="$HTTP_USER_AGENT=/Mozilla/" --><br>
Netscape Navigator<br>
<!--#else --><br>
неизвестной мне марки<br>
<!--#endif --></b><br>
<br>
Такой фагмент выведет:<br>
<br>
<center><i>Вы пользуетесь браузером Microsoft
Internet Explorer</i></center><br>
Ну что, насколько меньше этот фрагмент
скрипта на Java, который делает то же
самое? А главное это то, что всеми этими
условиями занимается сервер, а
посетителю страницы выдаётся готовый
результат - и он, в отличие от случая с
JavaScript, когда он может посмотреть код
скрипта, даже не знает, что что-то
делалось со страницей.</font>
</blockquote>
</span>
<p><font size="2" face="Verdana">Поэкспериментируйте с
SSI - и через некоторое время вы увидите,
как он облегчает жизнь. Размеры страниц
поуменьшатся за счёт того, что вы
избавитесь от повторения общих для всех
страниц фрагментов, да и затраты времени
на изменения в страницах будут поменьше.</font>
<p><font size="2" face="Verdana">Единственное, о чём
стоит помнить, так это о том, что лучше не
использовать SSI-команды при создании
страниц в редакторах типа Front Page - они их
обычно не понимают и выкидывают, и о том,
что одну SSI-команду нельзя вызвать из
другой (как нельзя вызвать SSI-команду из
скрипта, и (скажу, забегая вперёд) скрипт
из скрипта).</font>
<p><font size="2" face="Verdana">Работу страниц с SSI-командами
невозможно проверить, открыв их в вашем
браузере просто с диска компьютера. SSI-команды
понимает только вебсервер - поэтому для
проверки их работоспособности вам
придётся установить
вебсервер для тестирования сайта на
свой домашний компьютер.</font></p>
<p>
<?php
echo '« <a href="/work/?">В Раздел</a>';
include '../../style/foot.php';
?>