if ( -d $ENV{"PATH_TRANSLATED"} )provˆ©uje, zda cesta, zadan v dotazu, ukazuje na adres ©. Pokud ano, p©ipoj¡ se na jej¡ konec jm‚no souboru, kter˜ m b˜t u‘ivateli p©edlo‘en v takov‚m p©¡padˆ (typicky index.html). V˜sledkem je naplnˆn¡ promˆnn‚ $pagefile jm‚nem souboru, kter˜ m b˜t p©ek¢dov n a odesl n u‘ivateli.
Do promˆnn‚ $ext se vz pˆt¡ ulo‘¡ p©¡pona doty‡n‚ho souboru.
Asociativn¡ pole %mime obsahuje typy (hodnoty HTTP hlavi‡ky Content-Type), p©i©azen‚ p©¡pon m, kter‚ maj¡ b˜t k¢dov ny. Implicitnˆ se SaCzech star jen o soubory s p©¡ponami html, htm (typ text/html) a txt (typ text/plain). Chcete-li zmˆnit sortiment zpracov van˜ch p©¡pon, mus¡te zas hnout do souboru script.tpl, kter˜ je sou‡ st¡ distribuce, a znovu instalovat SaCzech.if ( $mime{$ext} )
M -li p©¡pona souboru v poli %mime p©i©azen typ, bude programem zpracov na. V opa‡n‚m p©¡padˆ dojde k proveden¡ z vˆre‡n˜ch © dk– podprogramu. Ty po¨lou jako odpovˆƒ klientovi p©esmˆrov n¡ (s vyu‘it¡m n vratov‚ho k¢du 301 "Trvale p©esunuto" a HTTP hlavi‡ky Location) p©¡mo na soubor - SaCzech vynech z URL s m sebe. Klient se po t‚to odpovˆdi obr t¡ znovu na WWW server s nov˜m URL souboru, kter‚ ji‘ neobsahuje vol n¡ k¢duj¡c¡ho programu. To samoz©ejmˆ znamen jist‚ zpo‘dˆn¡. Sekvence dotaz-p©esmˆrov n¡-dotaz-odpovˆƒ je jistˆ pomalej¨¡ ne‘ dotaz-odpovˆƒ. Ov¨em zpo‘dˆn¡, zp–soben‚ p©esmˆrov n¡m a nov˜m dotazem, je zpravidla zanedbateln‚ ve srovn n¡ s p©epravn¡ dobou dokumentu.
Alternativn¡m ©e¨en¡m by bylo, aby program klientovi rovnou odpovˆdˆl a poslal mu soubor v p–vodn¡m znˆn¡ beze zmˆny k¢dov n¡. Tento p©¡stup m dva velmi z va‘n‚ nedostatky.
Ka‘d˜ © dek je nejprve p©ek¢dov n vol n¡m podprogramu EncodeLine a pot‚ odesl n na v˜stup.while ( <HTML> )
SaCzech pamatuje i na p©¡padn˜ ne£spˆch p©i otev¡r n¡ souboru. V takov‚m p©¡padˆ po¨le klientovi jako odpovˆƒ n vratov˜ k¢d 404 "Nena¨el jsem" a skon‡¡ svou ‡innost.
Nejprve se pod¡vejte na jeho z vˆr. Nebude to zrovna pˆkn˜ pohled. Najdete zde slo‘it˜ podm¡nˆn˜ p©¡kaz (v manu lu Perlu se slibuje, ‘e je zpracov n inteligentnˆ a sk ‡e se rovnou na p©¡slu¨nou variantu), kter˜ podle v˜choz¡ho k¢du str nky (ulo‘en v promˆnn‚ $source) zvol¡ ten prav˜ p©¡kaz tr, kter˜ zajist¡ p©ek¢dov n¡ © dku.
VraŸme se teƒ zpˆt na za‡ tek tˆla podporgramu EncodeLine. Jestli‘e se na © dku vyskytuje slovo CHARSET, provede se tˆlo podm¡nˆn‚ho p©¡kazu. V nˆm se zaji¨Ÿuj¡ dvˆ operace. ž dek
zajist¡ nahrazen¡ ©etˆzce __CHARSET__ jm‚nem k¢du, do kter‚ho se dokument p©ekl p¡.s/__CHARSET__/ASCII/g;
N sleduje komplikovanˆj¨¡ pas ‘, kter umo‘¤uje nastaven¡ v˜choz¡ho k¢du. Program j¡ proch z¡ jen v p©¡padˆ, ‘e © dek obsahuje ©etˆzece MYCHARSET. Pak se do promˆnn‚ $newsource vyextrahuje jm‚no k¢du, uveden‚ v koment ©i. Jestli‘e je jm‚nem jednoho z podporovan˜ch k¢d–, p©epne se promˆnn $source na tuto hodnotu. Podle n¡ pak z vˆre‡n pas ‘ cyklu, o kter‚ jsem ji‘ mluvil, vybere spr vnou v˜choz¡ tabulku.
V n sleduj¡c¡m podm¡nˆn‚m p©¡kazu se zkoum , zda © dek obsahuje koment © se slovem BAR - tedy zda u‘ivatel po‘aduje automatick‚ generov n¡ nab¡dky k¢d–. Pokud je nalezen, vol se podprogram MakeBar s parametrem "en" pro anglickou nab¡dku (vyvol no koment ©em <--BAR E-->) nebo "cz", m -li b˜t nab¡dka v ‡e¨tinˆ (koment © bez "E").
Samotn˜ podprogram MakeBar nen¡ nic, na ‡em byste si mohli zl mat mozek. Jedn se o celkem prostou posloupnost v˜stup–, kter vytvo©¡ skupinku odkaz– na aktu ln¡ dokument, vedouc¡ch p©es r–zn‚ k¢dovac¡ skripty SaCzechu.
print "Content-Type: $mime{$ext}\n";Kter˜ na z kladˆ p©¡pony souboru vytvo©¡ hlavi‡ku Content-Type s odpov¡daj¡c¡m typem.
Jestli‘e p©i instalaci byla zapnuta volba timeservices, je tˆlo podprogramu mnohem ko¨atˆj¨¡. Na jeho za‡ tku se objev¡ ©ada lok ln¡ch promˆnn˜ch (local ...), kter‚ se napln¡ vol n¡m funkc¡ stat a localtime.
N sleduje (pokud jste to nezak zali volbou ifmodifiedsince) podm¡nˆn˜ p©¡kaz, obsluhuj¡c¡ podm¡nˆn‚ odesl n¡ souboru. Jestli‘e dotaz obsahoval HTTP hlavi‡ku If-Modified-Since a soubor nen¡ novˆj¨¡, odpov¡ skipt stavov˜m k¢dem 304 Not Modified a ukon‡¡ svou ‡innost. V opa‡n‚m p©¡padˆ pokra‡uje norm lnˆ d l. Vol n¡ podprogramu ConvertTime, kter‚ je sou‡ st¡ p©¡kazu, zaji¨Ÿuje p©evod ‡asov‚ho £daje (rozezn v v¨echny t©i tvary, povolen‚ podle RFC 1866) na vnit©n¡ tvar, pou‘¡van˜ SaCzechem.
Po hlavi‡ce Content-Type pak skript vytvo©¡ je¨tˆ Content-Length a Last-Modified podle £daj–, kter‚ z¡skal na za‡ tku podprogramu p©i vol n¡ stat.
Tato str nka je sou‡ st¡ on-line dokumentace programu SaCzech.Pavel Satrapa
29. kvˆtna 1996