COMPUTERWORLD
 

profil kontakt CD-ROM CW100 předplatné

archiv anketa CO VY NA TO? CW kariéra seriály
 

IDG

IDG CZ homepage
COMPUTERWORLD
PC WORLD
INTERNET4U
MEGABYTE
TESTCENTRUM
ON-LINE






COMPUTERWORLD 11/98

Aplikace na Webu (2)
Server Side Includes

Jiří Kosek ml.

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>© 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.

#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:

Tab. 1: Proměnné používané ve vsuvce #echo
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

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.

Tab. 2: Značky použitelné ve formátovacím řetězci timefmt

%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

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/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.

 

 

© IDG Czechoslovakia, a.s., Všechna práva vyhrazena
info@idg.cz, webmaster@idg.cz