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: