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.