ru en uk

  авторизация

(044) 362 48 16   (098) 294 41 60



Home   |   Articles   |   Other topics

Что такое SSI


Основным, простейшим, но в то же время чрезвычайно мощным инструментом поддержки больших наборов документов является SSI (Server-Side Includes - включения на стороне сервера). Если кто-то из вас знает Си, то он быстро поймет, что SSI чрезвычайно похож на макроязык. С помощью SSI можно не только в зависимости от некоторых условий выводить определенные части документа, не только формировать документ из заранее определенных кусочков, но и вставлять результат работы некоторого CGI сценария или программы прямо в документ.


В стандартном дистрибутиве Apache есть модуль mod_include. Начиная с версии 1.2 он имеет расширенное количество директив и называется - XSSI (eXtended SSI). По умолчанию он включен в компиляцию.

Компания ABCname предлагает такие услуги как создание сайта Киев любой сложности.

Включение механизма Server-Side Includes


Любой документ, у которого будет установлен обработчик "server-parsed" будет сканироваться этим модулем, если включена опция "Includes". Если вы имеете малое количество документов с SSI, то лучше всего в файле httpd.conf указать следующее:

AddType text/html .shtml

AddHandler server-parsed .shtml


и устанавливать у таких файлов расширение .shtml. Если же все или почти все документы будут иметь директивы SSI, то лучше в файле конфигурации указать:

AddHandler server-parsed .html


И не забудьте включить в опции директории узла (Directory, Virtual, .htaccess) опцию Includes:

Options +Includes


Конечно в этой строке могут быть и другие нужные вам опции.

Базовые директивы


Директивы SSI включаются в HTML документ в виде комментариев (это не мешает вам использовать обычные комментарии). Синтакс команд имеет следующий вид:


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

Рассмотрим определенные в Apache элементы SSI:


  • config - контролирует различные аспекты сканирования. Его атрибутами могут быть:

    1. errmsg - устанавливает сообщение, выводящееся при возникновении ошибки; в большинстве случаев целесообразно установить в пустую строку;
      Это стандартная ошибка при запуске скрипта, которого нет:

      А теперь заменим сообщение об ошибке и повторим:



      Вывод:
      Это стандартная ошибка, возникающая при запуске скрипта, которого нет:
      [an error occurred while processing this directive]
      А теперь заменим сообщение об ошибке и повторим:
      Ошибка, пишите автору ошибки

    2. sizefmt - устанавливает формат, в котором будет выводиться размер файла. Формат соответствует передаваемому библиотечной функции strftime; Директива config sizefmt изменяет формат вывода размера файла.
      Размер файла этой страницы в килобайтах:



      Размер файла этой страницы в байтах:



      Вывод:
      Размер файла этой страницы в килобайтах: 12k
      Размер файла этой страницы в байтах: 12,463

    3. timefmt - меняет формат вывода даты и времени.
      Время модификации файла этой страницы в секундах с 01.01.1970:



      Время модификации файла этой страницы в читабельном виде:




      Вывод:
      Время модификации файла этой страницы в секундах с 01.01.1970: 961590693
      Время модификации файла этой страницы в читабельном виде: 21.06.2000 16:31:33


    Параметры, используемые в 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.
    Твой IP -

    Твой броузер -

    Мой сервер -

    Ты пришел со страницы -


  • fsize - выводит размер файла в определенном с помощью sizefmt формате. Допустимые атрибуты:
  • file - определяет путь к файлу, относительно сканируемого документа;
  • virtual - определяет стандартный кодированный URL, относительно сканируемого документа, или, при наличии в начале слеша (/) - относительно корня документов узла.
  • flastmod - выводит дату последней модификации файла в определенном с помощью timefmt формате. Атрибуты аналогичны атрибутам fsize.
  • include - включает текст другого документа или файла в сканируемый файл. К включаемому файлу применяются все установленные правила ограничения доступа. Если для каталога, из которого включается файл, установлена опция IncludesNOEXEC, и включение данного документа привело бы к запуску программы, то документ не включается, и выводится сообщение об ошибке. CGI сценарии вызываются, как обычно с помощью URL, который может содержать кодированную строку запроса (query string). Положение файла указывается с помощью атрибутов:

    • file - указывает путь, относительно сканируемого документа; путь не может содержать ../ и не может быть абсолютным путем; всегда предпочтительнее использовать атрибут virtual;
    • virtual - содержит кодированный URL, относительный или абсолютный; URL не может содержать имя протокола или имя хоста, и может содержать строку запроса.

  • printenv - выводит содержимое переменных окружения. Вызывается без параметров.
  • set - устанавливает значение переменной. Ее атрибутами являются var, определяющий имя переменной, и value, определяющий ее значение.

 

Переменные включения


В дополнение к стандартным окружения CGI, модуль SSI делает доступными для директив и условий, а также для вызываемых через SSI сценариев следующие переменные:


  • DATE_GMT - текущее время по Гринвичу;
  • DATE_LOCAL - текущее локальное (для сервера) время;
  • DOCUMENT_NAME - имя файла (без каталогов) документа, запрошенного пользователем;
  • DOCUMENT_URI - декодированный URL запрошенного пользователем документа;
  • LAST_MODIFIED - дата последней модификации документа, запрошенного пользователем. То есть во вложенном SSI эта переменная будет содержать имя "главного" документа, а не вложенного.

 

Подстановка переменных


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


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


В результате такого присвоения переменная Zed будет иметь значение "Xbc_Y", если переменная a равна X, а переменная abc равна Y.

Условные операторы


Базовыми элементами контроля являются:





Элементы 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 истинно.
  • "=" и "!=" имеют больший приоритет, чем "&&" и "||", а "!" имеет наивысший приоритет.


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


 
Блокировка файлов
29.05.2007
"Warning! On most operation systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you cannot rely on flock() to protect files against other PHP scripts running in parallel threads of the same server instance!"
Постраничный вывод результата
29.05.2007
Блокировка файлов
29.05.2007
"Warning! On most operation systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you cannot rely on flock() to protect files against other PHP scripts running in parallel threads of the same server instance!"