Server Side Includes (SSI) je nejstarší a nejrozšířenější druh serverem vkládaných vsuvek. Dnes jej podporují snad všechny běžně dostupné WWW-servery.
Princip SSI spočívá v tom, že do zápisu stránky v HTML můžeme doplnit některé příkazy zapsané ve speciálním formátu. WWW-server HTML stránku před odesláním klientovi (prohlížeči) prohlédne a všechny vložené příkazy provede.
SSI se do stránky vkládají v následujícím tvaru:
<!--#příkaz parametr="hodnota"-->Vidíme, že SSI se uzavírají do HTML komentáře (
<!-- ...
-->
). Důvod je jednoduchý: Pokud server neumí SSI příkaz
interpretovat a neprovede jej, dorazí do prohlížeče SSI jako obyčejný
komentář, který neovlivní výsledné zobrazení stránky.
Ještě než se podíváme na příkazy, které SSI nabízí tvůrcům stránek, seznámíme se s několika důležitými fakty. Předně musíme zdůraznit, že ne všechny servery podporují SSI samy od sebe. Zejména komerčně pronajímané servery poskytovatelů připojení mívají podporu SSI z bezpečnostních důvodů vypnutou. Před používáním SSI je tedy vždy nutné zjistit od správce serveru, zda máme právo SSI používat.
Aby server nemusel před odesláním prohlížeči kontrolovat přítomnost
SSI ve všech .html
souborech, ukládají se stránky s SSI
obvykle do souborů s příponou .shtml
. WWW-server je pak
nakonfigurován tak, aby SSI prováděl v těchto souborech. Toto opatření
pomáhá zvýšit výkon serveru v případech, kdy SSI obsahují pouze některé
stránky.
#include
slouží ke vložení souboru do stránky. Jméno
vkládaného souboru je určeno parametrem file
. Nejčastější
použití příkazu je pro vložení standardizovaných hlaviček a patiček do
většího počtu stránek.
Jako hodnotu parametru file
je možno zadat pouze
relativní cestu. Pokud chceme pracovat i s absolutními cestami použijeme
parametr virtual
. Kořenový adresář v tomto případě však
odpovídá kořenovému adresáři dokumentů WWW-serveru. U
virtual
lze samozřejmě používat i relativní cesty.
Časté využití bývá právě pro patičky se základními informacemi o firmě. Patička se pak přidává ke každé stránce a při změně firemních údajů je stačí změnit ve vkládaném souboru.
Malá ukázka. Do souboru /includes/signature.inc
uložíme
standardizovanou patičku:
<DIV ALIGN=CENTER> <B>© Copyright OneBig Inc. 1998</B><BR> Senovážné nám. 3, Praha 1, 101 00<BR> tel.: +420+2+2456 8791<BR> e-mail: <A HREF="mailto:info@onebig.cz">info@onebig.cz</A> </DIV>Do všech firemních stránek pak nakonec vložíme jednoduchou SSI, která se postará o připojení patičky:
<HTML> <HEAD> <TITLE>OneBig Inc.</TITLE> </HEAD> <BODY> <H1>Nabídka služeb firmy OneBig Inc.</H1> ...další informace... <!--#include virtual="/include/signature.inc"--> </BODY> </HTML>Výsledek našeho snažení si můžeme prohlédnout na obrázku.
#include
. Výsledkem
je však číslo udávající velikost souboru, na který se odkazujeme
parametrem file
nebo virtual
.
#include
.
#echo
se nahradí obsahem proměnné
specifikované pomocí parametru var
. Proměnné, které můžeme
použít jsou:
DATE_GMT
| datum a čas serveru v Greenwichském čase |
DATE_LOCAL
| datum a čas serveru |
DOCUMENT_NAME
| jméno dokumentu, který si prohlížeč vyžádal od serveru |
DOCUMENT_URI
| URL adresa dokumentu, který si prohlížeč vyžádal od serveru |
LAST_MODIFIED
| datum a čas poslední změny souboru |
Pokud chceme, aby na každé stránce byl uveden čas její poslední modifikace, můžeme použít následující SSI:
Poslední modifikace: <!--#echo var="LAST_MODIFIED"-->
cmd
nebo cgi
. V prvním
případě parametr obsahuje jméno nějakého spustitelného souboru. Pokud
použijeme parametr cgi
, jako jeho hodnotu musíme uvést URL
adresu CGI-skriptu, jehož výstup chceme do stránky zařadit.
Mnoho serverů je nakonfigurováno tak, že SSI podporují kromě příkazu
#exec
. Běžný uživatel tak nemůže vyvolat spuštění programu,
který by mohl potenciálně ohrozit bezpečnost celého serveru.
#config
ovlivňuje formát zobrazení velikostí
souborů, údajů o datu a čase a chybových hlášení.
První parametr, který můžeme použít, je errmsg
. Jako
jeho hodnota se uvádí text, který se uživateli zobrazí, pokud se serveru
nepodaří nějaký SSI příkaz provést (chybná syntaxe, odkaz na
neexistující soubor apod.):
<!--#config errmsg="Chyba v SSI!"-->
Parametrem sizefmt
určujeme formát výpisů velikosti
souboru (#fsize
). Jako hodnotu parametru můžeme použít buď
bytes
nebo abbrev
. V prvním případě se
velikosti souborů vypisují v bajtech, ve druhém pak v KB nebo MB.
Formát zobrazení data a času ovlivňujeme parametrem
timefmt
. Jako hodnota se uvádí formátovací řetězec. Jeho
syntaxe je převzata z funkce strftime
jazyka C. Formátovací
řetězec může kromě běžného textu obsahovat speciální značky, kterými lze
do textu vložit např. měsíc, jméno dne v týdnu apod. Značky mají tvar
%x
a jejich úplný přehled nalezneme v tabulce.
%a
| Zkrácené jméno dne v týdnu (např. Po) |
%A
| Úplné jméno dne v týdnu (např. pondělí) |
%b
| Zkrácené jméno měsíce (např. Jan pro leden) |
%B
| Úplné jméno měsíce (např. leden) |
%c
| Formát data a času, který odpovídá národním zvyklostem nastaveným na serveru |
%d
| Den v měsíci (01-31) |
%H
| Hodina v 24hodinovém formátu (00-24) |
%I
| Hodina v 12hodinovém formátu (01-12) |
%j
| Den v roce (001-366) |
%m
| Měsíc (01-12) |
%M
| Minuta (00-59) |
%p
| indikátor toho, zda je dopoledne či odpoledne (např. AM/PM v angličtině) |
%S
| Sekunda (00-59) |
%U
| Číslo týdne v roce (pokud bereme neděli jako první den týdne /00-51/) |
%w
| Den v týdnu (pokud bereme neděli jako první den týdne /0-6/). |
%W
| Číslo týdne v roce (pokud bereme pondělí jako první den týdne /00-51/) |
%x
| Formát data, který odpovídá národním zvyklostem nastaveným na serveru |
%X
| Formát času, který odpovídá národním zvyklostem nastaveným na serveru |
%y
| Rok ve století (např. 75) |
%Y
| Rok včetně určení století (např. 1975) |
%Z
| Zkratka časového pásma |
%%
| Znak procenta |
Našim potřebám asi nejlépe vyhoví formátovací řetězec "%d. %m.
%Y"
pro datum a "%H.%M"
pro čas (s přesností na
minuty). Vsuvku zobrazující datum poslední modifikace stránky můžeme
upravit následujícím způsobem:
<!--#config timefmt="%d. %m. %Y v %H.%M"--> Poslední modifikace: <!--#echo var="LAST_MODIFIED"-->
Většina počítadel přístupů, se kterými se setkáváme, jsou ve skutečnosti malé obrázky, které jsou generovány CGI-skriptem. Toto řešení má však několik nevýhod. Jednak je načítání stránky s počítadlem ve formě obrázku pomalé -- pro přenesení obrázku, který má několik set bajtů, se musí otevřít nové komunikační spojení se serverem. Počítadlo přístupů není vidět v textových prohlížečích (jako je Lynx) anebo pokud máme vypnuto zobrazování obrázků. To by ještě však nebylo tak katastrofální. Horší je, že počítadla na této bázi vůbec přístupy pomocí textových prohlížečů neregistrují -- prohlížeč se obrázek nesnaží načíst a nevyvolá se tudíž CGI-skript, který zvyšuje čítač přístupů.
Všechny tyto problémy lze velice elegantně vyřešit počítadlem
vloženým pomocí SSI. Jako SSI totiž můžeme vložit volání libovolného
programu. Tento program bude udržovat databázi počty přístupů k
jednotlivým stránkám. Při svém vyvolání zjistí stránku, ze které byl
zavolán (z proměnné DOCUMENT_URI
), zvětší počet návštěv o
jedničku a na svůj výstup zapíše aktualizovaný počet přístupů. Údaj o
počtu přístupů pak putuje jako několik znaků přímo v textu stránky.
Odpadá tedy nutnost přenosu nepoměrně většího množství dat po dalším
TCP/IP spojení.
Prakticky výše nastíněný způsob realizuje např. počítadlo přístupů access_count od Chucka Muscianiho. Lze si jej stáhnout na adrese http://members.aol.com/htmlguru/access_counts.html.
Program stačí přeložit libovolným kompilátorem jazyka C a umístit do
nějakého vhodného adresáře (např. /usr/local/http/bin
). Na
místo, kde chceme mít v dokumentu zobrazen počet přístupů, pak vložíme
následující SSI:
Jste <!--#exec cmd="/usr/local/http/bin/access_count"-->. návštěvník stránky od 21. února 1996.