This page is part of documentation of C-SaCzech. It has been created and is maintained by Jaromφr DoleΦek, dolecek@ics.muni.cz

[Hosted by 4Web]
[CSßΦek 2.1]
 

Autor: Jaromφr DoleΦek, dolecek@ics.muni.cz


Dokumentace

 
Zp∞t k hlavnφ strßnce  

V²hody CSßΦku

Uv∞domuji si, ╛e ji╛ existujφ velmi kvalitnφ programy pro konverzi k≤dovßnφ na WWW - a╗ u╛ je to WWWdia pana J.Ko╣╗ßla nebo t°eba SaCzech od p. Pavla Satrapy, kter² byl vzorem pro CSßΦek, nehled∞ na mno╛stvφ jin²ch kodΘr∙.

Zßsadnφ nev²hoda WWWdia je v tom, ╛e nepodporuje relativnφ odkazy, proto╛e na konec odkazu je v╛dy t°eba psßt °et∞zec ?__CHARSET__. Je tedy v╛dy t°eba v ka╛dΘm odkazu uvΘst celΘ URL. Dal╣φ nev²hodou je, ╛e umφ p°ek≤dovat jen statickΘ strßnky a nedß se tedy pou╛φt pro p°ek≤dovßnφ nap°φklad v²stupu r∙zn²ch CGI skript∙.
SaCzech tohle v╣e odstra≥uje, ale je napsßn v Perlu a odezva s pou╛itφm p°ek≤dovßnφ je v²razn∞ hor╣φ ne╛ bez n∞j. Rozhodl se tedy napsat rychlej╣φ a na systΘmovΘ prost°edky mΘn∞ nßroΦnou verzi a p°epsat SaCzech 2.0 do jazyka C.
CGI CSßΦek mß v²hody SaCzechu, je ale mnohem rychlej╣φ a mocn∞j╣φ. CSßΦek lze takΘ v p°φpad∞ pot°eby zkompilat jako FastCGI program, Φφm╛ se podstatn∞ urychlφ jeho provoz.

U Apache se dajφ pou╛φt takΘ internφ apache moduly. V²kon modulu je oproti CGI mnohem vy╣╣φ - nemusφ se kv∙li ka╛dΘ strßnce spou╣t∞t samostatn² proces atd. Existujφcφ mod_czech od InterSoftu i i mod_html od pana Lampy ov╣em pot°ebujφ zßsah do zdrojßk∙ serveru a jeho rekompilaci. Nejen ╛e to znesnad≥uje nasazenφ (v╣eobecn² trend je pou╛φvßnφ DSO, tedy dynamickΘho nahrßvanßnφ modul∙), ale m∙╛e zp∙sobit i dal╣φ problΘmy, pokud je na serveru takΘ nap°φklad PHP Φi Apache-SSL. CSßΦek je jako jedin² schopen vlo╛enφ jako DSO modul, bez nutnosti patchovat server a dal╣φ moduly jako PHP Φi Apache-SSL. Je tedy velice jednoduchΘ ho nasadit a upgrejdovat - a takΘ (v nepravd∞podobnΘm p°φpad∞, ╛e se neosv∞dΦφ) bezbolestn∞ odstranit.

Modul na p°ek≤dovßnφ Φe╣tiny pro IIS (ISAPI filtr) existuje krom∞ CSßΦku jen jedin² - CZFILTER od firmy Sprinx. Podle reakcφ u╛ivatel∙ je v dan² moment (12.9.1999) CSßΦek mnohem stabiln∞j╣φ, asi dvakrßt rychlej╣φ a narozdφl od n∞j podporuje i FrontPage extensions a provoz pod SSL.

CSßΦek nabφzφ

 

Budoucnost - verze 2.1.X a dßl

Jednou se snad splnφ i smysl existence CSßΦka a bude standardnφ souΦßstφ ka╛dΘho ΦeskΘho Webu, zmφr≥ujφc tak chaos v pou╛φvan²ch kodΘr∙ Φe╣tiny. A nebo jednou (co╛ by bylo snad je╣t∞ lep╣φ) u╛ nic takovΘho nebude t°eba - to je ale bohu╛el spφ╣ utopie :)

JakΘ jsou tedy plßny ?

  1. zprovoznit Apache modul pod NT - ve verzi 2.1 CSßΦku se Apache modul pod NT sice nahraje, ale kv∙li (zatφm) pom∞rn∞ zßhadnΘ chyb∞ je╣t∞ nenφ funkΦnφ
  2. dopsat plnou podporu azbuky, vΦetn∞ p°ekladu z/do latinky a Unicode
  3. vytvo°enφ NSAPI mutace, tj. modul do Netscape server∙
  4. p°elo╛it dokumentaci do angliΦtiny a aktivn∞ CSßΦek roz╣i°ovat do ostatnφch st°edoevropsk²ch zemφ a Ruska (╛ßdn² konkrΘtnφ termφn)
  5. Apache: podpora pro Apache 2.0, jakmile bude Apache 2.0 k dispozici
Hodilo by se naportovat CSßΦek na OS/2 a MacOS. Bylo by to p°inejmen╣φm pouΦnΘ pro m∞ samΘho. Inu - a╛ bude jednou v╣echna prßce hotova ...
TakΘ by bylo dobrΘ n∞jak vyu╛φt dßvnΘho VMS portu pana BφlΘho pro plnΘ naportovßnφ CSßΦku na tuto platformu. Nemßm ale na ╛ßdn² stroj s tφmto operaΦnφm systΘmem p°φstup, tak╛e se to asi nezda°φ.

Mo╛nß by se takΘ hodila emulace n∞kter²ch jin²ch oblφben²ch kodΘr∙, jako je t°eba compose.

ZPET Zp∞t


Programßtorsk² boj s windoze aneb portovßnφ CSßΦku na nov² OS

Abych popsal sv∙j boj s NT: prvnφ a nejd∙le╛it∞j╣φ je sebrat po°ßdnou dßvku trp∞livosti. PotΘ aspo≥ 10 centimetr∙ tlustou hro╣φ k∙╛i, n∞co k pitφ a krabiΦku pilulek proti bolenφ hlavy. A pak u╛ staΦφ jen ╣t∞stφ ;-). No ale vß╛n∞.
K≤d odpovφdajφcφ metod∞ file byl v pohod∞. JedinΘ, co bylo t°eba zajistit, bylo predefinovßnφ str[n]casecmp na str[n]icmp(). Hor╣φ to bylo se sφ╗ovou Φßstφ. NT je bohu╛el po tΘto strßnce neustßle pozadu. Nejvφc m∞ na╣tvalo, kdy╛ p°i pokusu o otev°enφ streamu nad deskriptorem socketu funkce fdopen() bez udßnφ chyby prost∞ nezvlßdla to co m∞la. Nßsledujφcφm dotazem na ntsecurity@iss.net jsem zjistil, ╛e to opravdu je tak jak jsem se obßval - bohu╛el Winloose NT berou socket a deskriptor souboru jako dv∞ naprosto odli╣nΘ v∞ci a nad socketem stdio stream otev°φt nelze. Co╛ vedlo k tomu, ╛e jsem byl nucet si sßm naimplementovat v╣echny fce nad streamy, kterΘ jsou pro Φtenφ/zßpis dokumentu pou╛ity.
Druhß v∞c, kterß m∞ siln∞ na╣tvala byla neexistence alarm(). Pou╛φvß se nap°φklad tehdy, kdy╛ d∞lßm n∞jakou akci, kterß se m∙╛e zablokovat na blφ╛e neurΦenou dobu (typicky sφ╗ovß komunikace); procesu je po zadanΘm poΦtu sekund poslßn signßl SIGALRM. I p°esto, ╛e tato funkce je souΦßstφ IEEE Std1003.1-1990 (POSIX.1), na Windows tak n∞jak chybφ. Mrkvosofti v╣ude prohla╣ujφ, jak jejich NT jsou POSIX-compliant a skutek utek. Pro CGI CSßΦka tohle na╣t∞stφ p°φli╣ nevadφ - navazuje spojenφ v╛dy na stejn² poΦφtaΦ, na kterΘm jede, tak╛e je solidnφ ╣ance, ╛e k ╛ßdn²m sφ╗ov²m problΘm∙m nedojde (ov╣em modulo MS Windows NT Workstation a jeho omezenφ na 10 p°φchozφch TCP/IP spojenφ).

Pod MS Windows takΘ nenφ implementovßno POSIX.2 sleep() a nejsou definovßna makra pro zji╣t∞nφ typu soboru ze struktury, vrßcenΘ volßnφm stat().

No a to u╛ se blφ╛φm k zßv∞ru. Moje streamovΘ funkciΦky kupodivu fungovaly. Odla∩oval jsem je rad╣φ u sebe na NetBSD, proto╛e d∞lßnφ Φehokoli na Mrkvosoftech je (alespo≥ pro m∞) neuv∞°iteln∞ flustrujφcφ; nesnß╣φm, kdy╛ vφm co chci ud∞lat a systΘm mi to nedovolφ ud∞lat (nebo nedovolφ ud∞lat jednodu╣e). Tfuj.
P°i zßv∞reΦnΘm dola∩ovßnφ jsem do╣el na zajφmavou perliΦku. Fce stat(2) se na NT chovß pon∞kud zvlß╣tn∞ - systΘm sice dokß╛e stat()nout cesta\adresar, ale nedokß╛e cesta\adresar\. Tak╛e jsem byl nucet pro NT naimplementoval mal² wrapper, kter² p°ed volßnφm stat(2) odstranφ zßv∞reΦnΘ backslashe.

P°i ov∞°ovßnφ zkompilovatelnosti verze 2.0 na NT jsem bohu╛el op∞t narazil. Nic netu╣e jsem mezitφm zupgrejdoval MS VC na 5.0 a najednou nefungovalo str[i]cmp() - bylo p°ejmenovßno na _str[i]cmp(). Fce vsnprintf() se na NT jmenuje _vsnprintf(). Struktura stat se jmenuje _stat. Tentokrßt m∞ nejvφc na╣tvalo to, ╛e kompilßtor standardn∞ nedefinuje __STDC__ i p°esto, ╛e rozumφ ANSI C. Pokud se symbol definuje, mß to vedlej╣φ efekty (n∞kterΘ fce majφ p°ed jmΘno p°idßno _ nap°φklad), tak╛e to bylo nutnΘ obejφt jinak.

Ve╣kerΘ OS zßvislΘ v∞ci jsou v souborech compat.c a csa_compat.h. Pokud budete nuceni n∞co portovat na NT, doporuΦuju se na n∞ podφvat, u╣et°φte si tak urΦit∞ mnoho starostφ. Pracoval jsem na NT serveru 4.0 s MS VC++ 4.0, tak╛e ony informace jsou v dob∞ psanφ tΘto Φßsti (16.2.1997) vcelku aktußlnφ.

A╗ u╛ bylo naportovßnφ CSßΦku na NT jakkoli t∞╛kΘ, nynφ je prßce hotova a CSßΦek je od nyn∞j╣ka k dispozici pro Unix i NT p°φmo z police. Co funguje na Unixu bude v╛dy fungovat i na NT a naopak.

A co OpenVMS ? Hodilo by se jeho port takΘ n∞jak integrovat do k≤du, ale bohu╛el nemßm p°φstup k ╛ßdnΘmu stroji s OpenVMS, tak╛e by bylo asi dost problematickΘ lad∞nφ. Navφc mi pan Bφl² ani nedal k dispozici svΘ zdrojovΘ k≤dy, tak╛e se nemßm od Φeho "odpφchnout".

Port na jin² operaΦnφ systΘm zatφm nebyl pot°eba, tak╛e jsem ani nezkoumal, jak by to bylo optφ╛nΘ. Mo╛nß by se hodil port pro NeXtStep a pro MacOS, ale tak jako tak to nemßm kde ladit.

Mutace CSßΦku

Co je to mutace ? Je to urΦitß forma CSßΦku, uzp∙sobenß pro urΦitΘ prost°edφ. Momentßln∞ je CSßΦek k dispozici jako CGI, FastCGI, Apache a ISAPI mutace, v budoucnosti se chystßm takΘ na NSAPI mutaci. Ka╛dß mutace MUS═ implementovat n∞kolik zßkladnφch funkcφ, obvykle v samostatnΘm souboru podle nßzvu mutace (cgi.c pro (Fast)CGI, apache.c pro Apache modul). Ve stejnΘm souboru je obvykle i dal╣φ k≤d, kter² danß mutace ke svΘmu b∞hu pot°ebuje - nap°φklad main() pro CGI CSßΦek nebo k≤d pro zapojenφ do Apache serveru pro Apache CSßΦek.

Tyto zßkladnφ funkce pou╛φvß na mutaci nezßvislΘ jßdro CSßΦku k tomu, aby d∞lalo to, co mß. Ve v²sledku to znamenß, ╛e jen minimßlnφ mno╛stvφ k≤du se musφ p°episovat a upravovat v p°φpad∞, ╛e se pφ╣e novß mutace a drtivß v∞t╣ina k≤du se sdφlφ. ZnaΦn∞ to p°izpφvß ke stabilit∞ CSßΦku - na CSßΦek jsou v r∙zn²ch prost°edφch kladeny r∙znΘ po╛adavky a najde-li se chyba, jejφ oprava automaticky znamenß zlep╣enφ i pro ostatnφ mutace bez dal╣φ prßce. Navφc v∞t╣ina k≤du je opravdu neutrßlnφ k mutaci, tak╛e i v p°φpad∞ p°idßnφ n∞jakΘ novΘ vlastnosti tuto vlastnost zφskß bezprost°edn∞ ka╛dß mutace. Usnad≥uje to takΘ opravovßnφ chyb, proto╛e v r∙zn²ch situacφch m∙╛e b²t pohodln∞j╣φ trasovßnφ r∙znΘ mutace - n∞kdy je pohodln∞j╣φ t°eba CGI a n∞kdy zase Apache CSßΦek.

I v tomto systΘmu, kde je odd∞len na mutaci zßvisl² a nezßvisl² k≤d, je n∞kdy nutno upravovat na mutaci "nezßvisl²" k≤d proto, aby novß mutace fungovala korektn∞. Pro Apache a CGI CSßΦek nap°φklad platφ, ╛e je k dispozici celß odpov∞∩ (hlaviΦky i t∞lo) najednou; u ISAPI CSßΦku to neplatφ, nenφ tam ani zaruΦeno, ╛e najednou dostanu v╣echny hlaviΦky - k≤d, kter² poΦφtal s p∙vodnφm chovßnφm musel tedy b²t upraven tak, aby bylo mo╛n∞ hlaviΦky i t∞lo odpov∞di zpracovßvat po Φßstech.
PodobnΘ zm∞ny ale nejsou p°φli╣ ΦastΘ a s postupem Φasu stßle mΘn∞ nutnΘ. Nejvφc prßce dalo kdysi ono odd∞lenφ MD a MI k≤du p°i psanφ Apache mutace - do tΘ doby CSßΦek fungoval pouze jako CGI. Musel se vyseparovat k≤d, kter² je specifick² pro CGI a stanovit interface, kter²m se mutace zapojφ do CSßΦku. Od tΘ doby bylo provedeno n∞kolik zm∞n interface tak, aby se je╣t∞ vφc sdφlel k≤d mezi Apache a CGI mutacφ. To se z·roΦilo p°i psanφ ISAPI mutace, kdy jsem pak strßvil nejvφc Φasu p°i lad∞nφ ISAPI-specifickΘho k≤du a vlastnφ jßdro CSßΦku se m∞nilo minimßln∞.

ZPET Zp∞t


Zßklady - URL strßnky

Strßnku napi╣te v k≤du, kter² odpovφdß zvolenΘmu implicitnφmu k≤du serveru (ve skuteΦnosti k≤dovßnφ strßnky nenφ omezeno). Vystavte ji, jak je obvyklΘ. JedinΘ, co se zm∞nφ, bude URL, kter²m je t°eba se odkßzat na strßnku. Jestli╛e URL strßnky bez p°ek≤dovßnφ by bylo
http://www.kdesi.cz/cesta/stranka.html
bude URL tΘ╛e strßnky p°i po╛adavku jejφho p°ek≤dovßnφ do sedmibitovΘho ASCII
http://www.kdesi.cz/toASCII/cesta/stranka.html
za p°edpokladu, ╛e pou╛φvßte Apache CSßΦek.

Tento odkaz v╣ak p°edpoklßdß, ╛e p°edem vφte, jak² k≤d bude u╛ivatel vy╛adovat. To Φasto nemusφ b²t pravda. V takovΘm p°φpad∞ doporuΦuji spustit CSßΦek v m≤du whichcode - URL bude vypadat n∞jak takto:

http://www.kdesi.cz/whichcode/cesta/stranka.html
Na zßklad∞ externφ ╣ablony bude vygenerovßna strßnka, kde bude u╛ivateli bude oznßmeno, ╛e cφlov² dokument obsahuje diakritickß znamΘnka a umo╛nφ mu zvolit k≤d, kter² pova╛uje za optimßlnφ.

Druhß mo╛nost je pou╛φt toGUESS. V tomto m≤du se CSßΦek pokusφ zjistit, jakΘ k≤dovßnφ a jazyk klient podporuje a p°esm∞ruje klienta na URL, kterΘ odpovφdß jeho jazykov²m/k≤dovacφm schopnostem. Momentßln∞ ka╛dΘmu klientovi z ╚eska vnutφ ISO-8859-2 (klient, kter² by nerozum∞l tomuto k≤dovßnφ se dß pova╛ovat za nefunkΦnφ), ostatnφm pak ASCII. Pokud by m∞l u╛ivatel tu sm∙lu, ╛e pou╛φvß nefunkΦnφho klienta, m∙╛e si typ k≤dovßnφ pozd∞ji zm∞nit explicitn∞ p°es whichcode.

V p°φpad∞ Apache modulu a ISAPI filteru se m≤d toGUESS pou╛φvß implicitn∞ v p°φpad∞, ╛e URL neobsahuje CSßΦek, tj. jednß se o jednoduchΘ URL typu http://www.nekde.cz/cosi.html. Zjednodusuje se tak URL v obvyklΘm p°φpad∞, kdy u╛ivateli uhßdnut² default vyhovuje.

Zachovßnφ k≤dovßnφ p°i odkazech

CSßΦek od verze 2.0 automaticky p°episuje odkazy v dokumentu tak, aby se v danΘm URL op∞t objevil a zachovala se tak informace o vybranΘm k≤dovßnφ a (jazykovΘ) variant∞ dokumentu. Jakmile tedy zajistφte, aby dokument ╣el p°es CSßΦek, m∙╛ete dal╣φ odkazy pustit z hlavy. To "zaji╣t∞nφ" je problΘm jen pro (Fast)CGI CSßΦek; u Apache modulu a ISAPI filtru jde p°es CSßΦek ka╛d² dokument. Pro (Fast)CGI lze nap°φklad pou╛φt rozskokovou strßnku s tagem BASE, kter² zajistφ, ╛e v╣echny relativnφ odkazy jsou vzta╛eny k URL, kterΘ je tam uvedeno, mφsto toho, pod kter²m byl dokument zφskßn.
P°φklad:
strßnka http://kdesi/~ja/moje.html m∙╛e obsahovat znaΦku <BASE HREF="http://kdesi/to__CHARSET__/~ja/moje.html">. Pokud Φtenß° pou╛ije n∞kter² relativnφ link, je mu automaticky vybrßno k≤dovßnφ a jazykovß varianta podle jeho preferencφ a dßl se u╛ strßnky zobrazujφ v uhßdnutΘm k≤dovßnφ.

Pokud se odkazujete na jinΘ servery s CSßΦkem a chcete, aby se p°i odkazech zachovala informace o u╛ivatelem vybranΘm k≤dovßnφ, musφte CSßΦkovi seznam takov²ch server∙ sd∞lit. CSßΦek pak upravuje URL v dokumentech podobn²m zp∙sobem, jako p°i odkazech v rßmci "svΘho" serveru. Podrobn∞ji viz popis konfiguraΦnφho p°φkazu Apache csacekServers a stejnojmennΘho CSßΦek p°φkazu.

Samoz°ejm∞ lze na strßnku napsat klasickou sbφrku odkaz∙ pro zobrazenφ dokumentu v ASCII, ISO-8859-2 Φi CP1250:

<A HREF="/toASCII/">ASCII</A>
<A HREF="/toISO-8859-2/">ISO-8859-2</A>
<A HREF="/toCP1250/">CP1250</A>

Pro odkazy na servery, pou╛φvajφcφ nekompatibilnφ Φe╣tinu, lze vyu╛φt p°φkazu CHARSET. P°i odkazech na servery pou╛φvajφcφ SaCzech Φi WWWdia lze v textu pou╛φt °et∞zec __CHARSET__, kter² je (C)SßΦkem nahrazen jmΘnem v²stupnφho k≤dovßnφ ve tvaru, kterΘmu (C)SaCzech a WWWdia rozumφ.
P°φklad pou╛itφ:

<A HREF="http://www.jinde.cz/cgi-bin/to__CHARSET__/jinacesta/str.html">odkaz</A>
Pokud strßnka projde skriptem toKEYBCS2, kter² ji p°evede do k≤du KEYBCS2 (Kamenφci), bude v odeslanΘm dokumentu v tΘto znaΦce uvedeno URL
<A HREF="http://www.jinde.cz/cgi-bin/toKEYBCS2/jinacesta/str.html">odkaz</A>
P°edpoklßdßm, ╛e server, urΦen² tφmto absolutnφm URL, mß instalovßn CGI CSßΦek nebo SaCzech. M∙╛e, ale nemusφ se jednat o tent²╛ server, kter² poskytl p∙vodnφ dokument.

Jeliko╛ jsou nßzvy k≤d∙ shodnΘ s programem WWWdia a SaCzech, mohou se na sebe navzßjem korektn∞ odkazovat strßnky, jejich╛ servery pou╛φvajφ r∙znΘ implementace Φe╣tiny. Absolutnφ URL, uvedenΘ v²╣e, lze pou╛φt i na strßnce, kterß je p°ek≤dovßvßna programem WWWdia. Pot°ebujete-li naopak skoΦit ze strßnky k≤dovanΘ pomocφ CSßΦku nebo SaCzechu na strßnku v pomocφ WWWdia, pou╛ijte pro tento odkaz URL

<A HREF="http://www.diaserver.cz/cgi-bin/charset/jestecesta/str.html?charset=__CHARSET__">odkaz</A>

Podobn∞ jako __CHARSET__ pro WWWdia kompatibilnφ Φe╣tiny lze pou╛φt __LAMPACHARSET__ pro odkazy na servery, pou╛φvajφcφ mod_html pana Lampy.

K≤dovat pouze text a HTML!

CSßΦek k≤duje pouze dokumenty typu text/plain (Φist² text) a text/html (HTML dokument). Jinß data p°edß beze zm∞ny.

CGI CSßΦek navφc poklßdß za "p°ek≤dovatelnΘ" soubory, konΦφcφ na .html, .htm, .txt. O v╣echny ostatnφ dokumenty po╛ßdß server a rozhodne se, zda dan² dokument k≤dovat nebo ne, podle informacφ, kterΘ server vrßtφ.

Zm∞na v²chozφho k≤du

Implicitnφ v²chozφ k≤d, ve kterΘm budou psßny dokumenty, urΦuje sprßvce serveru p°i instalaci CSßΦku. M∞lo by se jednat o k≤d, ve kterΘm bude vytvß°ena v∞t╣ina strßnek (nejlΘpe v╣echny). Pokud autor pou╛φvß jinΘ k≤dovßnφ, mß v zßklad∞ dv∞ mo╛nosti:
P°evΘst strßnku do implicitnφho k≤du.
To je mΘn∞ pohodlnΘ a navφc to komplikuje pozd∞j╣φ ·pravy na strßnce (ka╛dß ·prava bude vy╛adovat novΘ p°ek≤dovßnφ).
Ponechat strßnku v k≤du p∙vodnφm a vyznaΦit jej.
CSßΦek podporuje META tag a za°φdφ se podle informace, kterß je tam uvedena, tj. je-li tam <META HTTP-Equiv="Content-Type" Content="text/html; charset=windows-1250"> CSßΦek sprßvn∞ pochopφ, ╛e obsah dokumentu je v k≤dovßnφ pou╛φvanΘm na MS Windows a za°φdφ se podle toho.

CSßΦek podporuje takΘ jin² mechanismus vyznaΦenφ k≤dovßnφ textu - pomocφ p°φkazu MYCHARSET. Vhodn² je zejmΘna tehdy, pokud r∙znΘ Φßsti dokumentu obsahujφ text v r∙znΘm k≤dovßnφ nebo chcete zachovat kompatibilitu se SaCzechem.

┌Φinnost p°φkazu MYCHARSET, pop°. META tagu zaΦφnß mφstem, kde byl uveden.

Li╣ta s nabφdkou k≤dovßnφ

CSßΦek umφ na strßnce generovat li╣tu s nabφdkou k≤dovßnφ. Slou╛φ na to specißlnφ p°φkaz BAR, kter² zp∙sobφ, ╛e CSßΦek v danΘm mφst∞ vytvo°φ a vypφ╣e li╣tu s nabφdkou k≤dovßnφ. V dob∞ kompilace m∙╛e b²t CSßΦek nakonfigurovßn tak, ╛e li╣tu automaticky vytvo°φ na konci ka╛dΘho HTML dokumentu.

Tvar li╣ty lze ovlivnit zadßnφm dal╣φch parametr∙ p°φkazu BAR. P°φklad∙m pou╛itφ je v∞novßna samostatnß strßnka.

Dokumenty v n∞kolika podobn²ch verzφch

Celkem Φastß situace na WWW serverech je, ze se dokumenty vyskytujφ v n∞kolika verzφch, kterΘ majφ ve svΘm zßklad∞ stejn² obsah, ale z r∙zn²ch d∙vod∙ je nelze slouΦit; jednß se nap°φklad o dv∞ jazykovΘ varianty tΘho╛ textu, HTML strßnky upravenΘ pro specißlnφ browser atd.
Pokud se takov²ch strßnek nahromadφ vφc, zaΦφnß b²t celkem nep°ehlednΘ, odkud a kam majφ vΘst hypertextovΘ odkazy a kde v╣ude se mß provΘst zm∞na, kdy╛ je t°eba n∞co upravit. I p°i jistΘ automatizaci je to nezanedbatelnΘ mno╛stvφ administrativnφ prßce navφc a bylo by tedy vhodnΘ, aby v╣echna souvisejφcφ data (Φi texty) byly pokud mo╛no v jednom souboru v n∞jakΘm konzistentnφm formßtu.

CSßΦek na to pou╛φvß metodu takzvan²ch Φßstφ. ╚ßst zaΦφnß p°φkazem PART, jeho╛ parametr je nßzev Φßsti, bez ohledu na velkß/malß pφsmena (tj. "CS" je pova╛ovßno za ekvivalentnφ s "cs"). V∞ci specifickΘ pro urΦitou variantu dokumentu tedy m∙╛ete napsat jako n∞jakou Φßst a nechat pak CSßΦek dynamicky vybrat to "pravΘ o°echovΘ" podle p°anφ u╛ivatele.
Podprobn∞j╣φ popis viz popis p°φkazu PART, kde naleznete i pßr p°φklad∙ pou╛itφ.

Podpora chrßn∞n²ch strßnek

Nßsledujφcφ text platφ pouze pro (Fast)CGI CSßΦek; pokud je CSßΦek souΦßst WWW serveru (Apache modul nebo ISAPI filter), pou╛ijφ se bezpeΦnostnφ mechanismy danΘho serveru bez toho, ╛e by je CSßΦek n∞jak ovliv≥oval.

P°i p°φmΘm p°edßvßnφ obsahu souboru CGI CSßΦek dßvß pozor, jestli se na "cest∞" k n∞mu nevyskytuje n∞jak² konfiguraΦnφ soubor (standardn∞ .htaccess). Pokud ano, o dokument po╛ßdß server.
Bohu╛el pak nastane problΘm v tom, ╛e CGI skript∙m se standardn∞ nep°edßvß login a heslo, kterΘ poslal klient. P°i po╛adavku o chrßn∞n² dokument tedy CSßΦek nem∙╛e tuto informaci poslat a p°φstup k dokumentu je v∞t╣inou zamφtnut. Pokud mßte zdrojov² k≤d serveru, kter² pou╛φvßte, dß se toto chovßnφ zm∞nit, tj. p°inutit server, aby ony informace od klienta p°edßval. SouΦßstφ distribuce je i patch pro Apache a NCSA httpd, kter² to zajistφ.
V p°φpad∞ CGI CSßΦka nelze pou╛φt ani (mnohem mΘn∞ spolehlivou) autorizaci p°es nßzev p°istupujφcφho poΦφtaΦe - vzhledem k tomu, ╛e CGI CSßΦek sßm ╛ßdß o dokument, po╛adavek nakonec p°ijde v╛dy z lokßlnφho poΦφtaΦe.

Pokud jste z p°edchozφch n∞kolika odstavc∙ zφskali pocit, ╛e CGI CSßΦek a chrßn∞nΘ strßnky nejdou p°φli╣ dohromady, je to sprßvn∞. Pokud to jen trochu jde, je mnohem lep╣φ pou╛φt modul do serveru.  

Vypisovßnφ konfigurace CSßΦka

Pokud CSßΦek spustφte s URL s p°ipojen²m ?csacek_info, CSßΦek vytvo°φ a vypφ╣e krßtkou informaΦnφ HTML strßnku s popisem konfigurace pro toto URL a seznamem zakompilovan²ch nastavenφ. Tato vlastnost je u╛iteΦnß zejmΘna p°i upgrejdech Φi lad∞nφ konfigurace CSßΦku pro dan² server. Tuto vlastnost lze v Φase kompilace vypnout.

  ZPET Zp∞t


Apache CSßΦek

CSßΦek na Apache byl p∙vodn∞ na 1.2.4. Nynφ je primßrn∞ vyvφjen na Apache 1.3.9 s tφm, ╛e je mo╛nΘ ho pou╛φvat i na Apache 1.1.1 i Apache 1.2.X. Nenφ nutnΘ patchovat server, CSßΦek modul se do serveru p°idßvß jako kter²koli jin² modul. Pod Apache 1.3.X je ho mo╛nΘ dokonce (s pomocφ axps) zkompilovat jako DSO modul a nahrßvat do serveru dynamicky.

Apache CSßΦek jede nap°. na serveru Masarykovy univerzity nebo na 4Web. Pokud ho pou╛φvßte a lφbφ se vßm, dejte mi v∞d∞t.

Konfigurace Apache CSßΦku

Apache CSßΦek se nastavuje pomocφ sady direktiv, uveden²ch v konfiguraΦnφch souborech serveru (a╗ u╛ t∞ch "globßlnφch" nebo .htaccess). P°esn² popis viz nφ╛e. Lze nastavovat CSßΦek r∙zn∞ pro ka╛d² virtualnφ server nebo adresß° - staΦφ danou direktivu uvΘst v p°φslu╣nΘ sekci <Location> Φi <VirtualHost>.
Pokud je jako parametr direktivy °etezec obsahujφcφ mezery, je nutnΘ jej cel² uzav°φt mezi uvozovky (viz p°φklad csacekBarDef).

P°φklad z konfigurace:

csacekEngine On
csacekDefaultCharset windows-1250
csacekIgnorePrefix /cgi-b/
csacekBarDef "ADDALWAYS=YES CS"

Apache, SSL a CSßΦek - jak to jde dohromady ?

Apache-SSL

U Apache-SSL od verze 1.17 staΦφ v souboru apache_ssl.c zm∞nit SSL_IS_OPTIONAL na TRUE. Apache-SSL pak bude fungovat i bez CSßΦku, pouze se p°idß n∞kolik test∙ na obsah n∞kter²ch struktur. Tyto testy jsou nutnΘ proto, aby CSßΦek byl schopen b∞hem svΘ prßce doΦasn∞ "vypnout" SSL. SSL se stßle pou╛ije p°i komunikaci s klientem, CSßΦek doΦasn²m vypnutφm dosßhne jen toho, ╛e on sßm od jßdra Apache dostane p°edßvan² dokument nezak≤dovan².

mod_ssl

Od verze 2.1.2 funguje CSßΦek i spoleΦn∞ s mod_ssl. Nejsou t°eba ╛ßdnΘ ·pravy k≤du. A╗ ╛ije mod_ssl!

Stronghold

Nemßm k dispozici, nem∞l jsem tedy p°φle╛itost otestovat. M∞l by v╣ak podle v╣eho b²t velmi podobn² Apache-SSL a ·prava CSßΦku tak, aby fungoval i pod Strongholdem, by nem∞la b²t p°φli╣ slo╛itß.

  ZPET Zp∞t


ISAPI CSßΦek

V rßmci v²voje webov²ch strßnek Masarykovy univerzity byl financovßn i v²voj CSßΦku pro IIS, tj. ISAPI filtru. ISAPI CSßΦek je nynφ dopracovßn a od verze 2.1 je k dispozici jako komerΦnφ software.

ISAPI CSßΦek p°ek≤dovßvß korektn∞ v²stup z ASP, CGI, server extensions (vΦetn∞ FP extensions) a samoz°ejm∞ statickΘ strßnky, funguje i pri provozu s SSL a je velmi rychl² - podle namßtkov²ch test∙ asi dvakrßt rychlej╣φ ne╛ CZFILTER.

Pokud mßte zßjem ISAPI CSßΦek vyzkou╣et, je k dispozici Φasov∞ omezenß verze, kterß p°estane fungovat p°ibli╛n∞ po m∞sφci. Objednat CSßΦek lze na samostatnΘ strßnce - lze tam nalΘzt i p°esnΘ finanΦnφ podmφnky a dal╣φ podrobnosti distribuce.

Konfigurace ISAPI CSßΦku

ISAPI CSßΦek je konfiguruje pomocφ zßznamu v MS Windows Registry. Jeho v∞tev je HKEY_LOCAL_MACHINE\Software\CSacek. JednotlivΘ direktivy jsou zadßvßny jako stringovΘ hodnoty, p°esn² seznam viz Konfigurace CSßΦka.

Zßznam v CSßΦkovskΘm klφΦi Registry platφ jako "globßlnφ". Je ale takΘ mo╛no nastavit vlastnosti CSßΦka pro jednotlivΘ virtußlnφ servery. Konfigurace pro ka╛d² virtußlnφ server je uvedena v podklφΦi CSßΦek klφΦe - jako jmΘno klφΦe se pou╛ije nßzev virtußlnφho serveru. Je mo╛no uvΘst i port, od jmΘna serveru je odd∞len dvojteΦkou. Pokud je port uveden, konfigurace platφ jen p°i p°φstupu na tento konkrΘtnφ port, pokud ne, platφ pro jak²koli p°φstup na dan² virtußlnφ server. P°φklad nßzvu podklφΦe:

www.muj.cz
www.jiny.cz:8000
V konfiguraci virtußlnφho serveru mohou b²t uvedeny v╣echny direktivy jako v tΘ globßlnφ, jen csacekIgnorePrefix se pro virtußlnφ servery ignoruje - v dob∞, kdy je t°eba, je╣t∞ nenφ jasnΘ, na kter² virtußlnφ server po╛adavek p°i╣el a musφ se tedy pou╛φt globßlnφ nastavenφ. Pro csacekServers platφ n∞co podobnΘho, ale z jinΘho d∙vodu - op∞t se pou╛ije v╛dy to, co je nastaveno jako "globßlnφ" (tedy to, co je nastaveno p°φmo v CSßΦek klφΦi), proto╛e to je opravdu globßlnφ v∞c a nemß smysl to nastavovat r∙zn∞ pro ka╛d² virtußlnφ server.

Po ka╛dΘ zm∞n∞ konfigurace je nutno p°estartovat Web server - jen tak se zajistφ, aby CSßΦek zm∞n∞n² zßznam z registry znovu naΦetl.

  ZPET Zp∞t


Konfigurace CSßΦka

N∞kterΘ vlastnosti CSßΦka lze ovlivnit vhodn²m nastavenφm. Pro CGI CSßΦka to lze pouze v Φase kompilace (mo╛nost run-time konfigurace nenφ pro CGI rozumnß). Chovßnφ Apache CSßΦku a ISAPI CSßΦku lze ale pom∞rn∞ jednoduch²m zp∙sobem ovlivnit i pozd∞ji - nastavenφm v kofiguraci serveru (Apache) nebo nastavenφm v registry (ISAPI). Zde je popis jednotliv²ch direktiv:

csacekBarDef
Definice defaultnφho tvaru li╣ty; funguje ·pln∞ stejn∞, jako by byl na zaΦßtku ka╛dΘho dokumentu uveden p°φkaz BARDEF ve stejnΘm tvaru.
Default: nic
csacekChangeURL On nebo Off
Nastavuje, jestli se v dokumentu odkazy upravovat tak, aby ╣ly "p°es CSßΦek".
Default: On
csacekCompress On nebo Off
Nastavuje, jestli se mß pou╛φt komprese nebo ne.
Default: On
csacekDefaultCharset
Nastavuje defaultnφ k≤dovßnφ serveru. CSßΦek bude p°edpoklßdat, ╛e strßnka je v tomto k≤dovßnφ, pokud si sama ne°ekne jinak. Textovß data od klienta budou p°evedeny do tohoto k≤dovßnφ p°ed p°edßnφm dat ostatnφm modul∙m.
Default: iso-8859-2 na Unixu a windows-1250 na MS Windows
csacekDefaultPartname
JmΘno Φßsti, kterΘ se pou╛ije pokud nebylo zadßno p°i volßnφ CSßΦku (tj. URL bylo typu http://kdesi/toASCII/cosi)
Default: .cs
csacekEngine On nebo Off
Zapφnß CSßΦek (a'la Apachovske RewriteEngine).
Default: On
csacekImplicitWork On nebo Off
Pokud cφlovΘ k≤dovßnφ nenφ v URL uvedeno (URL je typu http://kdesi/cosi/neco.html, tj. bez toXXX), CSßΦek se pokusφ uhßdnou klientem podporovanΘ k≤dovßnφ a automaticky do n∞j po╛adovan² dokument p°evede. Pokud se vßm toto chovßnφ nehodφ, lze implicitnφ p°ek≤dovßnφ pomocφ tΘto direktivy vypnout.
Default: On
csacekIgnorePrefix
Nastavuje prefix URL, kter² se bude ignorovat p°i hledßnφ oznaΦenφ cφlovΘho k≤dovßnφ; defaultn∞ /cgi-bin. Je to direktiva slou╛φcφ pouze k usnadn∞nφ p°echodu od CGI (C)SßΦku k modulu.
Upozorn∞nφ: tuto direktivu lze pou╛φt pouze v globßlnφ konfiguraci serveru - v Φase, kdy je pot°eba, je╣t∞ nenφ k dispozici lokßlnφ konfigurace.
Default: /cgi-bin
csacekServers
Seznam "CSßΦek kompatibilnφch" server∙ - v p°edßvan²ch HTML dokumentech se odkazy na tyto servery automaticky upravφ tak, aby se zachovalo u╛ivatelem pou╛φvanΘ k≤dovßnφ a jazykovß verze
JednotlivΘ nßzvy server∙ se pφ╣ou navzßjem odd∞lenΘ Φßrkou. Je mo╛nΘ zadat i port (od jmΘna serveru odd∞len² mezerou) - pak se budou odkazy m∞nit jen pokud URL vede na dan² port danΘho serveru.
Default: Apache - v╣echny virtußlnφ servery, ISAPI - servery, kterΘ majφ vlastnφ konfiguraci v CSßΦek v∞tvi v registry
csacekTemplateDir
Adresß° se ╣ablonami - momentßln∞ pouze ╣ablonou k whichcode (soubor whichcode_template.html).
Default: /www/csacek na UN*Xu a C:/CSacek na MS Windows.
CSßΦek je standardn∞ "zapnut²", pokud ho chcete vypnout, je t°eba ho explicitn∞ vypnout pomocφ csacekEngine. Stßle se bude intern∞ z URL odstra≥ovat CSßΦkovß Φßst (tj. pokud server bude po╛ßdßn o http://server/toASCII/dir/doc.html, p°evede se po╛adavek intern∞ na http://server/dir/doc.html), CSßΦek ale s dokumentem poslan²m nazpßtek klientovi nebude nic d∞lat.

  ZPET Zp∞t


Seznam CSßΦkovsk²ch p°φkaz∙

P°φkazy v CSßΦku se uzavφrajφ mezi <? a ?>. ? je pou╛ito proto, ╛e se jedna o specißlnφ SGML "tag", urΦen² pro vklßdßnφ p°φkaz∙ jazyk∙ vlo╛en²ch (embedded) do SGML dokumentu. Kv∙li kompatibilit∞ s SaCzechem je podporovßno takΘ <!-- a -->.

P°φklad pou╛itφ:

<? BAR EN LONGNAMES=YES ?>
Obecn∞ platnß pravidla:

P°φkazy: