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