Vsuvky Server Side Includes

Server Side Includes (SSI) je nejstarší a nejrozšířenější druh serverem vkládaných vsuvek. Dnes jej podporují snad ...


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í příkaz SSI 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ů
vypnutu. 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
SSI #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>&copy; 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 následujícím obrázku 1.
#fsize
Tento příkaz má stejné parametry jako #include. Výsledkem je však číslo
udávající velikost souboru, na který se odkazujeme parametrem file nebo virtual.
#flastmod
Příkaz do stránky vloží datum poslední modifikace souboru. Soubor se určuje
stejně jako u příkazu #include.
#echo
Vsuvka s příkazem #echo se nahradí obsahem proměnné specifikované pomocí
parametru var. Proměnné, které můžeme použít, jsou uvedeny v tabulce 1.
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"-->
#exec
Tento příkaz vloží do stránky výstup programu, který je specifikován pomocí
parametru 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
Příkaz #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 2.
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"-->
Počítadlo přístupů jako serverem vkládaná vsuvka
Počítadla přístupů ke stránce jsou velice oblíbená jak u tvůrců stránek (kteří
jsou pyšní na návštěvnost své stránky), tak i u návštěvníků stránek ("to budou
kvalitní stránky, když se na ně kouká tolik lidí").
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/htmlgu ru/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.
8 0467 / pahnPři příležitosti akce Březen měsíc Internetu vyhlašuje redakce
Computerworldu soutěž Bookmark měsíce. Ten nejlepší úlovek (zaslaný do konce
března e-mailem na adresu pavel_houser@idg.cz) bude odměněn cenou 1 000 Kč
(vymáhání výhry právní cestou je vyloučeno). Hodnocení bude samozřejmě
subjektivní (těžko jinak porovnat, zda jsou "lepší" fotky Marsu nebo seznam rad
pro uživatele Windows), přihlédneme však především k originalitě obsahu
stránky. V dopise uveďte vždy maximálně 3 podle vašeho názoru pozoruhodné
adresy a pro případ, že právě vy budete vybraným šťastlivcem i kontaktní
spojení. Můžete připojit i témata, která byste v budoucnu uvítali v rubrice
Bohatství WWW.
DATE_GMTdatum a čas serveru
v Greenwichském čase
DATE_LOCALdatum a čas serveru
DOCUMENT_NAMEjméno dokumentu,
který si prohlížeč vyžádal
od serveru
DOCUMENT_URIURL adresa dokumentu,
který si prohlížeč vyžádal
od serveru
LAST_MODIFIEDdatum a čas poslední
změny souboru
%aZkrácené jméno dne v týdnu (např. Po)
%AÚplné jméno dne v týdnu (např. pondělí)
%bZkrácené jméno měsíce (např. Jan pro leden)
%BÚplné jméno měsíce (např. leden)
%cFormát data a času, který odpovídá národním
zvyklostem nastaveným na serveru
%dDen v měsící (01-31)
%HHodina v 24hodinovém formátu (00-24)
%IHodina v 12hodinovém formátu (01-12)
%jDen v roce (001-366)
%mMěsíc (01-12)
%MMinuta (00-59)
%pindikátor toho, zda je dopoledne či odpoledne
(např. AM/PM v angličtině)
%SSekunda (00-59)
%UČíslo týdne v roce (pokud bereme neděli jako
první den týdne /00-51/)
%wDen 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/)
%xFormát data, který odpovídá národním zvyklostem
nastaveným na serveru
%XFormát času, který odpovídá národním zvyklostem
nastaveným na serveru
%yRok ve století (např. 75)
%YRok včetně určení století (např. 1975)
%ZZkratka časového pásma
%%Znak procenta

8 1467 / pah









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.