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_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"-->
#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
%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φcφ (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"-->
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.