Úvodem

SSI (Server Side Includes) jsou nejstarším způsobem, jak udělat stránky částečně dynamické. SSI jsou podobné ASP či PHP. Veškeré příkazy, které jsou ve stránce obsaženy, jsou provedeny na straně serveru (jak říká název). Většinou se používají pro kompletaci dokumentu z několika dílčích. Například: hlavička a patička, které jsou společné pro mnoho stránek, jsou uloženy odděleně a přidávají se k jednotlivým dokumentům jedním příkazem jako doslovná vsuvka. To šetří práci, protože změna dvou souborů umožňuje rychle změnit vzhled všech stránek.

Soubory, ve kterých jsou direktivy SSI obsaženy, mají většinou příponu .shtml. Tak je tomu v případě www.fi.muni.cz (aisa), ale tato podmínka může být na serveru nastavena i jinak, například pomocí souboru .htaccess.

Ve webovém serveru Apache se o zpracování SSI stará modul mod_include. Je dostupný ve všech dnešních verzích Apache implicitně. Postupně je upravován a rozšiřován o další direktivy. Počínaje verzí Apache 1.2 začaly být přidávány direktivy, které nejsou součástí původní definice NCSA.

Syntaxe

Direktivy SSI se zadávají ve tvaru: <!--#direktiva parametr="hodnota"-->

Na místo, kde se SSI direktiva ve zdrojovém textu webové stránky nachází, je při přístupu ke stránce vložen výstup/výsledek direktivy. Direktiva je vyhodnocena vždy znova při každém jednom přístupu. Pokud by se při jejím zpracování vyskytla chyba, je pro jistotu její výsledek uzavřen do HTML poznámky, aby nebyl narušen vzhled dokumentu.

Následuje přehled vybraných SSI direktiv (detaily na httpd.apache.org).

set: <!--#set var="promenna" value="hodnota"-->
  • Vloží do proměnné určené ve var hodnotu value.
  • Př.: <!--#set var="jmeno" value="jirka"-->
  • Do proměnné lze vložit i hodnotu jiné proměnné, ale jména proměnných na pravé straně přiřazení musí být uvozena $.
  • Pokud chcete použít v přiřazení samotný znak $ (bez denotace proměnné), musíte jej uvést znakem \ (tedy: \$).
  • Problematická jména proměnných (např. jména s mezerami) je vhodné uzavřít mezi {}.
echo: <!--#echo var="promenna"-->
  • Vypíše obsah proměnné určené parametrem var.
  • Př.: <!--#echo var="jmeno"-->
  • Jméno proměnné není uvozeno $.
  • Užitečné proměnné předdefinované WWW serverem:
DATE_LOCALdatum a čas na serveru
DATE_GMTdatum a čas na serveru (v Greenwichském čase)
LAST_MODIFIEDdatum a čas poslední změny stránky (zdrojový text)
DOCUMENT_NAMEsouborové jméno dokumentu
DOCUMENT_URIURL adresa dokumentu
include: <!--#include file="cesta/soubor"--> nebo <!--#include virtual="cesta/soubor"-->
  • Vypíše obsah souboru cesta/soubor.
  • Př.: <!--#include file="muj_soubor.inc"-->
  • Parametr file: dovoluje odkazovat se pouze na soubory v adresářovém podstromu zobrazovaného dokumentu.
  • Parametr virtual: umožňuje odkazovat soubory kdekoli v dokumentovém stromu příslušnému zobrazovanému dokumentu (tj. cesta může začínat /).
flastmod: <!--#flastmod file="soubor"-->
  • Vrátí časovou známku poslední modifikace dokumentu na disku.
  • Př.: <!--#flastmod file="muj_soubor.exe"-->
  • Výpis je možné formátovat pomocí direktivy config.
fsize: <!--#fsize file="soubor" --> nebo <!--#fsize virtual="soubor" -->
  • Vrátí velikost souboru zadaného parametrem (rozdíl stejný jako u include).
  • Př.: <!--#fsize file="muj_doc.txt"-->
  • Výpis je možné formátovat pomocí direktivy config.
exec: <!--#exec cmd="binarka"--> nebo <!--#exec cgi="cgicko"-->
  • Vrací výstup programu specifikovaného v parametru cmd nebo cgi.
  • Př.: <!--#exec cgi="ahoj.cgi"-->
  • Parametr cgi: spustí program jakožto CGI skript.
  • Parametr cmd: spustí program pomocí shellu.
  • Pokud vám nefunguje např. <!--#exec cmd="date"-->, zkopírujte si binárku v parametru do svého adresáře nebo příkaz spouštějte pres shellový skript, který vám již díky vnitřním přístupovým právům poskytne kýžený výsledek:
#!/bin/bash
#
date
#EOF
config: <!--#config timefmt="format"--> nebo <!--#config sizefmt="format"--> nebo <!--#config errmsg="text"-->
  • Nastavuje formát výpisu data a času, resp. velikosti souborů, resp. chybových zpráv.
  • Parametr timefmt: formátovací řetězec obsahuje text, který bude zobrazován jako datum/čas. V řetězci můžete použít direktivy uvedené v následující tabulce (více viz man strftime) - budou systémem nahrazeny aktuální hodnotou.
  • Př.: <!--#config timefmt="%d. %m. %Y v %H:%M hodin"-->
%azkrácené jméno dne v týdnu (např. Mon)
%Ajméno dne v týdnu (Monday)
%bzkrácené jméno měsíce (Jan)
%Bjméno měsíce (January)
%cformát data a času nastavený na serveru
%dden v měsíci (01-31)
%Hhodina (00-24)
%Ihodina (01-12)
%jden v roce (001-366)
%mměsíc (01-12)
%Mminuta (00-59)
%pindikátor dopoledne/odpoledne (AM/PM)
%Ssekunda (00-59)
%Utýden v roce (00-51); první den může být neděle
%wden v týdnu (0-6); první den může být neděle
%Wtýden v roce (00-51)
%xformát data nastavený na serveru
%Xformát času nastavený na serveru
%yrok jako dvojčíslí (např. 99)
%Yrok jako čtyřčíslí (1999)
%Zzkratka časového pásma (např. CET)
%%znak '%'
  • Parametr sizefmt: nabývá dvou možných hodnot: bytes (velikost souboru v bytech) a abbrev (velikost souboru v kB nebo MB).
  • Př.: <!--#config sizefmt="bytes"-->
  • Parametr errmsg: jako text napište řetězec, který má být zobrazen při chybě.
  • Př.: <!--#config errmsg="[Chybka!]"-->
  • "Neviditelnou" chybu můžete vygenerovat vložením HTML komentáře - např.: <!--#config errmsg="<!--[Chybka!]-->"-->
if: <!--#if expr="vyraz"--> nejaky text <!--#elif expr="vyraz"--> nejaky text <!--#else--> nejaky text <!--#endif-->
  • Klasický příkaz větvení s obligátní sémantikou.
  • Možné výrazy v parametru expr:
retezecpravda, pokud retezec není prázdný
operand1 = operand2pravda, pokud jsou operandy shodné
operand1 != operand2pravda, pokud se operandy liší
operand1 > operand2pravda, pokud operand1 je větší než operand2
operand1 >= operand2pravda, pokud operand1 je větší nebo roven operand2
operand1 < operand2pravda, pokud operand1 je menší než operand2
operand1 <= operand2pravda, pokud operand1 je menší nebo roven operand2
( vyraz )klasické závorkování
! vyrazpravda, pokud vyraz není pravdivý (negace)
vyraz1 && vyraz2pravda, pokud jsou oba výrazy pravdivé
vyraz1 || vyraz2pravda, pokud alespoň jeden z výrazů je pravdivý
  • Př:
<!--#set var="cislo" value="20" -->
<!--#if expr="$cislo<20" -->
<b>Číslo je menší než 20</b>
<!--#elif expr=″$cislo=20″ -->
<b>Číslo je rovno 20</b>
<!--#else -->
<b>Číslo je větší než 20</b>
<!--#endif -->

Tipy k nastavení SSI pod Apache souborem .htaccess

Pomocí souboru .htaccess můžete ovlivnit chování SSI u dokumentů v adresáři, kde je .htaccess umístěn. Soubor má textový formát; každá konfigurační položka zabírá samostatný řádek. Některé z platných položek uvádí následující tabulka.
Options +IncludesPovoluje vyhodnocování SSI
XBitHack OnV každém souboru MIME typu text/html spustitelném vlastníkem budou interpretovány SSI direktivy
AddType text/html .shtmlSoubory s příponou .shtml budou považovány za dokumenty MIME typu text/html, čímž je umožněna intepretace SSI

Prvotní verzi textu zpracoval Jiří Činčura.