Server Side Includes - oživení statických stránek

Server Side Include neboli SSI je nejstarší a nejjednoduší způsob jak zdynamizovat statické html stránky. Umožňuje velmi rychlé vkládání kusu html kódu do jiného html souboru přímo prostřednictvím webového serveru. Nastavení je jednoduché a možnosti velké.

Nastavení webového serveru pro použítí SSI

Snad všechny dostupné webové servery podporují SSI. Většina z nich má dokonce SSI přímo zabudované v sobě. Protože používám velmi rozšířený webový server Apache, bude následující popis konfigurace určen právě pro Apache. Pro provozování SSI s Apache je třeba mít zapnut modul mod_include, avšak ten bývá zapnut implicitně, takže většinou není potřeba jej zapínat ručně.
V ideálním případě, tedy při možnosti konfigurovat soubor httpd.conf, stačí v tomto konfiguračním souboru přidat následující řádky:
Options +Includes # povolí SSI
AddType text/html .shtml # začne považovat soubory s příponou .shtml za text/html soubory
AddHandler server-parsed .shtml # napoví Apache jak zpracovat .shtml soubory
XBitHack on # budou se parsovat všechny spustitelné soubory typu text/html
Pokud nemáte přístup ke konfiguračnímu souboru Apache, lze tyto direktivy vložit i do .htaccess.
Více není třeba nastavovat. Snad jen pokud chcete připojovat výstup CGI skriptů, musí se vložit také direktiva
AddHandler cgi-script .cgi

Možná se ptáte, proč používat příponu .shtml a ne klasickou .html. Samozřejmě není problém používat příkazy SSI v souborech s příponou .html, ale je třeba si uvědomit, že Apache bude potom hledat SSI příkazy i v souborech, kde žádné nejsou a tím se může zpomalit chod celého webového serveru. Proto je lepší oddělit html soubory, které SSI používají, od normálních statických souborů právě změnou jejich přípony na .shtml.

Používání Server Side Includes v html kódu

SSI definuje množství direktiv pro dynamičnost webových stránek. Jako příklad uvedu 3 mnou nejpoužívanější direktivy SSI: inlude, exec a echo. Už podle jejich názvu je zřejmé k čemu slouží.

#inlude

Direktiva #include přebírá jako parametr jméno souboru, který se má vložit na místo volání této direktivy. Jednoduché a efektivní. Využitelné například pro zobrazení hlavičky a patičky stránky, která často bývá pro všechny stránky stejná.

    Příklady použití (voláme například stránku http://ifanda.cz/ssi-priklad/index.shtml):
  1. <!--#include virtual="/header.html"--> (použije soubor http://ifanda.cz/header.html)
  2. <!--#include file="submenu.html"--> (použije soubor http://ifanda.cz/ssi-priklad/submenu.html)

Rozdíl mezi použitím argumentů virtual a file je v tom, kde se bude hledat vkládaný soubor. Při použití argumentu file je cesta k souboru relativní k adresáři, kde je umístěn volaný html soubor. Argument virtual zase očekává relativní URL ke vkládanému souboru, je tedy vztažen k Document_Root. Důležité je počáteční lomítko cesty ('/'), které když odstraníme, bude se virtual chovat přesně jako file.

#exec

Pro vkládání výstupu CGI skriptů pomocí SSI je zde direktiva #exec s dvěma možnými argumenty cgi a cmd.
Použitím
<!--#exec cgi="/cgi-bin/nahoda.cgi"-->
se zavolá CGI skript nahoda.cgi a jeho výstup se vloží na místo direktivy. Pro cestu k CGI skriptu platí stejná pravidla jako pro argument virtual direktivy #include.
Někdy se hodí volat přímo příkaz operačního systému. Pro tento účel je zde argument cmd:
<!--#exec cmd="ls"--> (vypíše obsah aktuálního adresáře)
<!--#exec cmd="perl /cesta/ke/skriptu/skript.pl"--> (spuštění skriptu explicitním určením intepreteru)
V praxi zřejmě najde větší uplatnění argment cgi i z toho důvodu, že příkazy operačního systému můžeme jednoduše volat uvnitř CGI skriptů.

#echo

Poslední direktivou Server Side Includes, kterou si uvedeme je #echo. Direktiva vypíše aktuální hodnotu některé z vybraných proměnných prostředí (environment variable) pomocí argumentu var. Například
<!--#echo var="DATE_LOCAL"-->
vypíše aktuální čas na serveru. Další možné proměnné jsou LAST_MODIFIED (datum poslední změny souboru), DOCUMENT_URI (URL vyžádaného dokumentu) nebo například DOCUMENT_NAME (jméno vyžádaného dokumentu). Seznam všech proměnných je zde.

Závěr

Všimněte si...

Všimněte si, že všechny direktivy SSI jsou uvozeny html komentáři. Tím je vyřešen problém zobrazení SSI příkazů při jejich nefunkčnosti. Nepřeložené SSI direktivy se ve výsledku nezobrazí, neboť jsou jednoduše zakomentovány.

Na závěr poradím malou vychytávku pro automatické spouštění úvodní stránky index.shtml místo index.html. Stačí vytvořit nebo upravit soubor .htaccess s řádkou
DirectoryIndex index.shtml index.html
Po této úpravě bude webový server hledat nejprve index používající SSI a teprve potom statickou verzi úvodní stránky.