[ 05. November 1999]
- Svato_Straka
V²stup CGI skriptu - 2. Φas¥ CGI
Mo₧no sa vßm bude zda¥, ₧e postupujeme od konca k zaΦiatku, ke∩ sme si eÜte nespomenuli niΦ o vstupe do CGI skriptu a u₧ sa vrhßme na v²stup. Mßm vÜak dva d⌠vody, preΦo takto postupujem. Prv² z nich je ten, ₧e CGI skript nemusφ v₧dy dosta¥ na svoj vstup dßta. Druh² je tie₧ vcelku prozaick² - darmo budem vedie¥ ako skriptu dßta odovzda¥, ke∩ neviem ako ich spracovanΘ vrßti¥ u₧φvate╛ovi.
Ako som u₧ spomenul v predchßdzaj·cich dieloch, v²stup skriptu pozostßva z dvoch Φastφ: http hlaviΦky a samotn²ch dßt. Tvorba dßt je zrejme ka₧dΘmu jasnß, pozrime sa teda na http hlaviΦky.
HTTP hlaviΦky
CGI skript (lepÜie povedanΘ jeho autor) sa m⌠₧e rozhodn·¥, Φi v CGI skripte vrßti kompletn· http hlaviΦku, alebo len jej Φas¥. VΣΦÜinou samozrejme programßtori volia druh· mo₧nos¥ - na v²stup svojho CGI skriptu posielaj· len tie najnutnejÜie riadky hlaviΦky a jej dotvorenie prenechßvaj· web servru. Uve∩me si teraz tak² prφklad:
print "Content-type: text/htmlnn";
print <<Koniec_Html;
<HTML>
<HEAD>
<TITLE>Jednoduch² virtußlny HTML dokument</TITLE>
</HEAD>
<BODY>
<H1>Virtußlny HTML dokument</H1>
<HR>
<P>
Tento dokument je v²stupom CGI skriptu $ENV{SCRIPT_NAME}.
</BODY>
</HTML>
Koniec_Html
exit(0);
Myslφm ₧e tento skript netreba ve╛mi vysvetlova¥ Φo sa Perlu t²ka, spomenul by som vÜak jednu Φrtu ktorß sa tu objavuje: vkladanie premenn²ch. Pok²m do textu, ktor² mß by¥ v²stupom skriptu vlo₧φte nßzov premennej a tßto premennß je definovanß, Perl automaticky doplnφ na danΘ miesto jej hodnotu. V naÜom prφpade teda bude $ENV{SCRIPT_NAME} zamenenΘ na skutoΦnΘ meno s·boru so skriptom.
Riadok print "Content-type: text/htmlnn"; v naÜom skripte je prßve tou Φas¥ou k≤du, ktorß generuje Φas¥ http hlaviΦky. KonkrΘtne tu je povedanΘ, ₧e MIME typ v²stupn²ch dßt bude text/html . Samozrejme ₧e MIME typ v²stupn²ch dßt nie je jedinou vecou, ktor· m⌠₧ete v http hlaviΦke urΦi¥. V nasleduj·cej tabu╛ke s· vymenovanΘ typy hlaviΦiek, ktorΘ m⌠₧e CGI skript vrßti¥.
Pri tvorbe http hlaviΦiek vo vaÜich skriptoch si v₧dy zapamΣtajte 2 zßsady:
- Blok hlaviΦiek musφ by¥ oddelen² od dßt prßzdnym riadkom
- Riadky hlaviΦky nemusia dodr₧iava¥ ₧iadne zvlßÜtne poradie
Samozrejme ako som u₧ spomenul, nemusφte nechßva¥ dotvorenie hlaviΦky na server ale m⌠₧ete ju v CGI skripte vytvori¥ kompletn·. Takto m⌠₧ete pri navracanφ dokumentu klientovi obφs¥ jeden z Φlßnkov re¥azca ktor²m vßÜ skript prechßdza. Treba vÜak pamΣta¥ na skutoΦnos¥, ₧e prφpadn· chybu v hlaviΦke u₧ nemß mo₧nos¥ server opravi¥.
Ako server zistφ, ₧e v²stup skriptu obsahuje kompletn· http hlaviΦku? Servery typu NCSA a CERN (spadß sem aj najpou₧φvanejÜφ web server - Apache) to spoznaj· pod╛a nßzvu CGI skriptu, ktorΘho meno musφ zaΦφna¥ re¥azcom "nph-", Φo znamenß Non-parsed header ("nerozobranß" hlaviΦka). V²stup takΘhoto skriptu ide priamo ku klientovi bez zapojenia servera.
Mo₧no sa p²tate, ak² to m⌠₧e ma¥ v²znam. Predstavte si situßciu, ke∩ chcete na strane klienta nieΦo postupne vypisova¥ po urΦitej dobe (napr. spravi¥ Φosi ako odpoΦφtavanie od 50 po jednej sekunde tak, aby ka₧d· sekundu skript vypφsal hodnotu, ktorß ostßva k nule). Keby₧e na toto pou₧ijete nekompletn· hlaviΦku, cel² skript by prebehol na servri a v²sledok by sa zobrazil a₧ po vykonanφ skriptu. Ak vÜak pou₧ijete kompletn· hlaviΦku, budete vidie¥ ako skript vypisuje jednotlivΘ hodnoty.
Myslφm ₧e pre dneÜok by staΦilo. Nabud·ce si povieme nieΦo viac o http hlaviΦkßch, presmerovaniach servra a nßvratov²ch k≤doch http po₧iadaviek.
|
|
|