(044) 362 48 16 (098) 294 41 60
|
|
|
Що таке SSI Основним, найпростішим, але в той же час надзвичайно потужним інструментом підтримки великих наборів документів є SSI (Server-Side Includes - включення на стороні сервера). Якщо хтось із вас знає Сі, то він швидко зрозуміє, що SSI надзвичайно схожий на макрооязик. За допомогою SSI можна не тільки в залежності від деяких умов виводити певні частини документа, не тільки формувати документ із заздалегідь визначених шматочків, але і вставляти результат роботи деякого CGI сценарію або програми прямо в документ.
У стандартному дістрібутіве Apache є модуль mod_include. Починаючи з версії 1.2 він має розширене кількість директив і називається - XSSI (eXtended SSI). За замовчуванням він включений в компіляцію.
Включення механізму Server-Side Includes Будь-який документ, у якого буде установлену обробник "server-parsed" буде скануватися цим модулем, якщо включена опція "Includes". Якщо ви маєте мала кількість документів з SSI, то найкраще у файлі httpd.conf вказати наступне:
AddType text / html. Shtml <br>
і встановлювати у таких файлів розширення. shtml. Якщо ж всі або майже всі документи будуть мати директиви SSI, то краще у файлі конфігурації вказати:
AddHandler server-parsed. Html І не забудьте включити в опції директории вузла (Directory, Virtual,. htaccess) опцію Includes:
Options + Includes Звичайно, в цьому рядку можуть бути й інші потрібні вам опції.
Базові директиви Директиви SSI включаються в HTML документ у вигляді коментарів (це не заважає вам використовувати звичайні коментарі). Сінтакс команд має такий вигляд:
<!--# element attribute = value attribute = value ... -> Дуже часто значення вміщується у подвійні лапки. Деякі команди дозволяють иметь тільки одну пару атрибут-значення. Зверніть увагу, що заключна частина коментарю (-->) повинна відділятися від директиви пробілом, інакше вона буде сприйнята, як її частина.
Розглянемо визначені в Apache елементи SSI:
- config - контролює різні аспекти сканування. Його атрибутами можуть бути:
- errmsg - встановлює повідомлення, що виводять при виникненні помилки; у більшості випадків доцільно встановити в порожній рядок;
Це стандартна помилка при запуску скрипта, якого немає: <!--# exec cgi = & quot; / 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] А тепер замінимо повідомлення про помилку, а повторимо: Помилка, пишіть автору помилки
- sizefmt - встановлює формат, в якому будевиводитися розмір файлу. Формат відповідає передається бібліотечної функції strftime; Директива config sizefmt змінює формат виводу розміру файлу.
Розмір файлу цієї сторінки в кілобайтах: <!--# config sizefmt = "abbrev" -> <!--# fsize file = "ssi.shtml "-> <BR> Розмір файлу цієї сторінки в байтах: <!--# config sizefmt = "bytes" -> <!--# fsize file = "ssi.shtml" -> <BR> Висновок: Розмір файлу цієї сторінки в кілобайтах: 12k Розмір файлу цієї сторінки в байтах: 12463
- timefmt - змінює формат виведення дати й часу.
Час модифікації файлу цієї сторінки в секундах з 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
Параметри, що використовуються в 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" | |
% 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 - <!--# echo var = "REMOTE_ADDR" -> <BR> Твій броузер - <!--# echo var = "HTTP_USER_AGENT" -> <BR> Мій сервер - <!--# echo var = "SERVER_NAME" - > <BR> Ти прийшов зі сторінки - <!--# echo var = "HTTP_REFERER" -> <BR>
- 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 директів. У цих випадках знак долара можна вставити, випереджаючи його слешом:
<!--# if expr = "$ a = $ test" -> Для запобігання двозначності можна укладати ім'я змінної у фігурні дужки:
<!--# set var = "Zed" value = "; $ (a) bc_ $ (abc) "-> В результаті такого присвоєння мінлива Zed буде мати значення "Xbc_Y", якщо мінлива a дорівнює X, а мінлива abc дорівнює Y.
Умовні оператори Базовими елементами контролю є:
& lt ;!--# if expr = "test_condition" -> <!--# elif expr = "test_condition" -> <!--# else -> <!--# endif -> Елементи elif і else є необов'язковими.
Елемент endif закінчує елемент if і є обов'язковим.
test_condition може бути одним з наступних:
- string - істинно, якщо string не порожня;
- string1 = string2
- string1! = string2
- string1 <string2
- string1 <= string2
- string1> string2
</ li> - 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 правдиве.
- "=" І "! =" Мають більший пріоритет, ніж "& &" і "||", а "!" має найвищий пріоритет.
Все, що не розпізнається, як змінна, вважається рядком. ЕсЧи рядок має пробіли або символи табуляції, то її треба укладати в лапки. |
|