Neodvolateľná c doska cgi. Common Gateway Interface (CGI)
Andover, Massachusetts, 19. november 2003
Spoločnosť The Commerce Group, Inc. (NYSE: CGI), najväčší poskytovateľ poistenia súkromných osobných automobilov v Massachusetts a CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), popredný poskytovateľ informačných technológií a služieb podnikového spracovania, dnes oznámil podpísanie šesťročnej obnovy zmluvy o outsourcingu obchodných procesov (BPO) v hodnote 35 miliónov USD. CGI bude poskytovať kompletné služby spracovania politiky pre súkromné osobné a komerčné automobilové linky v Massachusetts, ako aj poskytovanie nástroja rozhrania agentúry CGI CollaborativeEdge, aplikačnej podpory a údržby, regulačnej podpory, systémového poradenstva a služieb správy dokumentov.
Gerald Fels, výkonný viceprezident a finančný riaditeľ Commerce Group, uviedol: „Ako popredný poskytovateľ súkromných osobných automobilov v Massachusetts je naším cieľom poskytovať našim agentom a zamestnancom služby, ktoré im pomôžu dosahovať najvyššiu úroveň. V priebehu rokov sme si vybudovali silný vzťah s CGI. Ich systém je robustný a presný a ich tím dobre pozná naše interné systémy spracovania. To je pre nás dôležité."
Serge LaPalme, prezident, poisťovacie obchodné služby pre CGI, dodal: "Sme veľmi radi, že pokračujeme v našom vzťahu s Commerce Group, ktorý trvá viac ako 30 rokov. Commerce Group je aj naďalej jedným z našich vážených obchodných partnerov a strategicky náš úspech. Aby sme našim klientom pomohli ďalej sa sústrediť na ich hlavnú činnosť, využívame nové technológie tam, kde to má zmysel. Náš tím dôverne pozná poisťovníctvo a veľmi jedinečné regulačné prostredie štátu, a preto sa rýchlo prispôsobujeme existujúce riešenia pre tento neustále sa vyvíjajúci sektor."
O spoločnosti The Commerce Group, Inc.
The Commerce Group, Inc., holdingová poisťovňa, má ústredie vo Websteri, Massachusetts. Medzi dcérske spoločnosti majetkového a úrazového poistenia Commerce Group patria The Commerce Insurance Company a Citation Insurance Company v Massachusetts, Commerce West Insurance Company v Kalifornii a American Commerce Insurance Company v Ohiu. Commerce Group je prostredníctvom kombinovaných poisťovacích aktivít svojich dcérskych spoločností na 22. mieste. skupina poistenia automobilov v krajine od AM Najlepšie na základe informácií o priamom predpísanom poistnom z roku 2002.
O CGI
Spoločnosť CGI bola založená v roku 1976 a je piatou najväčšou nezávislou spoločnosťou poskytujúcou informačné technológie v Severnej Amerike podľa počtu zamestnancov. CGI a jej pridružené spoločnosti zamestnávajú 20 000 odborníkov. Anualizované výnosy CGI sú v súčasnosti 2,8 miliardy CDN (1,9 miliardy USD) a k 30. septembru 2003 bol počet nevybavených objednávok CGI 12,3 miliardy CDN (9,1 miliardy USD). CGI poskytuje klientom po celom svete komplexné IT služby a služby v oblasti obchodných procesov z pobočiek v Kanade, Spojených štátoch a Európe. Akcie CGI sú kótované na TSX (GIB.A) a NYSE (GIB) a sú zahrnuté v TSX 100 Composite Index, ako aj v S&P/TSX Canadian Information Technology a Canadian MidCap Indices. Webová stránka: .
Strana 1 z 30
Dnes sú také veci ako kniha návštev, vyhľadávanie na serveri, formulár na odosielanie správ základným atribútom takmer každej serióznej stránky. Problém zavádzania týchto a iných zvončekov a píšťaliek, samozrejme, vo všetkých smeroch vzrušuje predstavivosť začínajúceho správcu webu, zbavuje ho spánku, chuti do jedla a túžby po pive. Žiaľ, štúdium HTML zdrojov stránok konkurentov nedáva nič iné ako odkazy na určitý „cgi-bin“ a dokonca aj v diskusných skupinách sa občas objavia nejaké cgi-skripty. Tento článok je venovaný základom používania tých istých cgi skriptov pre slávu a prosperitu vášho webu.
Na začiatok si myslím, že musíme pochopiť pojmy. CGI skript je program, ktorý sa spúšťa na webovom serveri na žiadosť klienta (t. j. návštevníka webu). Tento program sa v zásade nelíši od bežných programov, ktoré sú nainštalované na vašom počítači – či už ide o MS Word alebo hru Quake. CGI nie je programovací jazyk, v ktorom je skript napísaný, ale Common Gateway Interface je špeciálne rozhranie, s ktorým sa skript spúšťa a interaguje s ním.
Krátka odbočka o CGI
Takže čo je CGI- skriptá a všeobecne podobné veci. Začnime tým, že váš prehliadač (keď ste zadali URL) je pripojený podľa protokolu HTTP so zadaným serverom a požiada ho o požadovaný súbor, asi takto:GET /~paaa/cgi-bin/guestbbok.cgi HTTP/1.0-To je najdôležitejšia vec v žiadosti
No, ak sa požaduje jednoduchý súbor napr .html ak existuje takýto súbor, server odošle odpoveď prehliadaču:
HTTP/1.0 200 OK
Typ obsahu: text/html
Ďalej za prázdny riadok (je potrebné oddeliť hlavička od telo) pochádzajú informácie z URL"a
To je v podstate všetko www... prechádzate z odkazu na odkaz ....
Čo ak však potrebujete do tohto fádneho procesu niečo vniesť naozaj interaktívne, dynamické, krásne a veľkolepé....? No na túto otázku existuje odpoveď. Len čo keby v žiadanom URLšpecifikovať špeciálny program ( CGI,program Spoločné rozhranie brány - Spoločné rozhranie brány) a to, že tento program niečo vydá a odošle do prehliadača .... Server sa spustí .cgi program a napríklad po spracovaní údajov formulára vás zapíše niekde do svojej databázy a povie vám to si veľký chlap :)
No dúfam, že som vás zaujala......?
Stručné informácie o tom, čo potrebujete vedieť napísať CGI skriptá: No v prvom rade treba vedieť čo internetu a ako to funguje (vieš? ;)))
) No, trochu programátorských zručností (to je najdôležitejšia vec)
Napíšeme spolu nejaký jednoduchý scenár a potom ti poviem, kde sa tu ten pes hrabal ....
Najprv si vytvorte adresár vo svojom domovskom adresári cgi-bin:
cd public_html
mkdir cgi-bin
chmod 0777 cgi-bin
Posledný riadok bude veľmi dôležitý.
Vezmite editor a napíšte: #!/usr/bin/perl
#first.cgi
print "Typ obsahu: text/html\n\n";
tlačiť" ";
tlačiť" Ahoj!!!
";
vytlačiť "";
Uložte ho do adresára cgi-bin pod menom najprv.cgi.No a ako si to zachránil?
A teraz ho urobte spustiteľným (koniec koncov, toto je program):
chmod +x prvý.cgi
No, blížime sa k slávnostnej chvíli .... napíšte do riadku prehliadača http://www.uic.nnov.ru/~your_login/cgi-bin/first.cgi
a uvidíte, čo sa stane. Bude jedna z dvoch vecí, buď bude skript fungovať a uvidíte ním vygenerovanú stránku (blahoželáme, dorazila do našej police!) Alebo Interná chyba servera Potom sa nebojte, niečo ste urobili zle. Potom budete potrebovať návod na chytanie bĺch. V prvom rade je možné vykonať kontrolu syntaxe takto:
perl -c prvý.cgi
Perl vám okamžite zobrazí buď chybové hlásenia (dobre, stane sa, že ste vynechali bodkočiarku, zabudli ste uzavrieť zátvorky alebo úvodzovky ...), toto sa dá opraviť priamo počas cesty.
Logickejšie je preskočiť výstup prázdneho riadku, ktorý oddeľuje hlavičku od tela:
print "Typ obsahu: text/html\n\n"; #Všetko je správne
print "Typ obsahu: text/html\n"; #CHYBA!!!
Poďme analyzovať skript:
Prvá línia #!/usr/bin/perl Jednoducho určuje, kde sa v systéme nachádza Perl. Druhý je len komentár - po značke môžete strčiť čokoľvek #
Potom príde print "Typ obsahu: text/html\n\n"; Toto je hlavička označujúca typ obsahu, ktorý skript vytlačí na svoj štandardný výstup STDOUT ide na server na spracovanie. Prázdny riadok oddeľuje hlavičku od tela, čo v našom prípade je
Ahoj!!!
Server spracuje odpoveď skriptu a na základe nej vygeneruje a odošle odpoveď prehliadaču (Server väčšinou nemení telo správy, iba doplní hlavičku o polia potrebné pre HTTP protokol)
No základy sú už zvládnuté, všetko nie je také ťažké a deprimujúce, ako by sa na prvý pohľad mohlo zdať
Teraz si môžete sami precvičiť písanie takýchto jednoduchých skriptov, aby ste to dostali do rúk.
Kapitola 9.
Programovanie s CGI
Začlenenie časti o CGI do databázovej knihy sa môže zdať rovnako zvláštne ako mať kapitolu o oprave áut v kuchárskej knihe. Samozrejme, aby ste mohli ísť do obchodu s potravinami, potrebujete prevádzkyschopné auto, ale je vhodné o tom hovoriť? Úplný úvod do CGI a webového programovania vo všeobecnosti presahuje rámec tejto knihy, ale krátky úvod do týchto tém postačuje na rozšírenie schopnosti MySQL a mSQL reprezentovať údaje vo sfére webu.
Táto kapitola je určená hlavne pre tých, ktorí sa učia o databázach, ale chceli by získať aj nejaké znalosti o webovom programovaní. Ak je vaše priezvisko Berners-Lee alebo Andressen, je nepravdepodobné, že tu nájdete niečo, čo by ste ešte nevedeli. Ale aj keď nie ste v CGI nováčikom, mať po ruke rýchlu referenciu pri ponorení sa do tajomstiev MySQL a mSQL môže byť celkom užitočné.
čo je CGI?
Ako väčšina skratiek, Common Gateway Interface (CGI znamená Common Gateway Interface) toho veľa nehovorí. Rozhranie s čím? Kde je táto brána? O akej komunite hovoríme? Pre zodpovedanie týchto otázok sa vráťme trochu späť a pozrime sa na WWW ako celok.
Tim Berners-Lee, fyzik, ktorý pracoval v CERN-e, prišiel s webom v roku 1990, hoci plán sa datuje do roku 1988. Cieľom bolo umožniť výskumníkom časticovej fyziky jednoducho a rýchlo si vymieňať multimediálne dáta – text, obrázky a zvuk – cez internet. WWW sa skladal z troch hlavných častí: HTML, URL a HTTP. HTML- formátovací jazyk používaný na reprezentáciu obsahu na webe. url- toto je adresa používaná na získanie obsahu vo formáte HTML (alebo inom) z webového servera. A nakoniec http- je to jazyk, ktorému webový server rozumie a umožňuje klientom vyžiadať si dokumenty zo servera.
Možnosť posielať všetky druhy informácií cez internet bola revolúciou, no čoskoro sa objavila ďalšia možnosť. Ak môžete poslať akýkoľvek text cez web, prečo potom nemôžete odoslať text vytvorený programom a nie prevzatý z hotového súboru? To otvára more možností. Jednoduchým príkladom je použitie programu, ktorý vytlačí aktuálny čas, aby čitateľ pri každom zobrazení stránky videl správny čas. Niekoľko šikovných hláv v Národnom centre pre superpočítačové aplikácie (NCSA), ktorí stavali webový server, videlo túto príležitosť a čoskoro sa zrodilo CGI.
CGI je súbor pravidiel, podľa ktorých môžu programy na serveri odosielať údaje klientom cez webový server. Špecifikáciu CGI sprevádzali zmeny v HTML a HTTP, ktoré zaviedli novú funkciu známu ako formuláre.
Zatiaľ čo CGI umožňuje programom posielať dáta klientovi, formuláre rozširujú túto schopnosť tým, že umožňujú klientovi posielať dáta do tohto CGI programu. Teraz môže používateľ nielen vidieť aktuálny čas, ale aj nastaviť hodiny! Formuláre CGI otvorili dvere skutočnej interaktivite vo svete webu. Bežné aplikácie CGI zahŕňajú:
- Dynamický HTML. Celé stránky môžu byť generované jediným CGI programom.
- Vyhľadávače, ktoré hľadajú dokumenty s používateľsky zadanými slovami.
- Knihy návštev a nástenky, kde môžu používatelia pridávať svoje správy.
- Objednávkové formuláre.
- Dotazníky.
- Extrahovanie informácií z databázy hosťovanej na serveri.
V nasledujúcich kapitolách rozoberieme všetky tieto aplikácie CGI, ako aj niekoľko ďalších. Všetky poskytujú vynikajúcu príležitosť na pripojenie CGI k databáze, čo nás v tejto časti zaujíma.
HTML formuláre
Pred skúmaním špecifík CGI je užitočné pozrieť sa na najbežnejší spôsob, akým koncoví používatelia získavajú rozhranie k programom CGI: formuláre HTML. Formuláre sú súčasťou jazyka HTML, ktorý poskytuje koncovému používateľovi rôzne typy polí. Údaje zadané do polí možno odoslať na webový server. Polia môžu byť použité na zadávanie textu alebo môžu byť tlačidlami, na ktoré môže používateľ kliknúť alebo zaškrtnúť. Tu je príklad stránky HTML obsahujúcej formulár:
<НТМL><НЕАD><ТITLЕ>Moja stránka s formulárom
<р>Toto je stránka formulára.
Tento formulár vytvorí 40-miestny reťazec, do ktorého môže používateľ zadať svoje meno. Pod vstupným riadkom sa nachádza tlačidlo, po stlačení sa údaje formulára prenesú na server. Nasledujú značky súvisiace s formulármi, ktoré podporuje HTML 3.2, dnes najpoužívanejší štandard. Názvy značiek a atribútov je možné zadať v každom prípade, ale dodržiavame voliteľnú konvenciu, že úvodné značky sa píšu veľkými písmenami a záverečné značky sa píšu malými písmenami.
Jediný typ vstupu, ktorý sme tu nepoužili, je typ IMAGE pre značku . Dalo by sa použiť ako alternatívny spôsob odoslania formulára. Typ IMAGE je však málokedy kompatibilný s textovými a málo citlivými prehliadačmi, takže je rozumné sa mu vyhnúť, pokiaľ vaša stránka nemá bohatý grafický štýl.
Teraz, keď ste oboznámení so základmi HTML formulárov, ste pripravení preskúmať samotné CGI.
CGI špecifikácia
Takže čo presne je „súbor pravidiel“, ktorý umožňuje programu CGI v, povedzme, Batavia, Illinois, komunikovať s webovým prehliadačom vo Vonkajšom Mongolsku? Oficiálnu špecifikáciu CGI spolu s množstvom ďalších informácií o CGI možno nájsť na serveri NCSA na adrese http://hoohoo . ncsa.uluc.edu/cgi/. Táto kapitola však existuje preto, aby ste nemuseli dlho cestovať a hľadať ju sami.
Existujú štyri spôsoby, ako CGI odovzdáva údaje medzi rámcom CGI-npor a webovým serverom, a teda webovým klientom:
- premenné prostredia.
- Príkazový riadok.
- Štandardné vstupné zariadenie.
- štandardné výstupné zariadenie.
Pomocou týchto štyroch metód server odošle všetky údaje odoslané klientom do programu CGI. Program CGI potom urobí svoje čaro a pošle výstup späť na server, ktorý ho prepošle klientovi.
Tieto údaje sú založené na serveri Apache HTTP. Apache je najpoužívanejší webový server a beží na takmer akejkoľvek platforme, vrátane Windows 9x a Windows NT. Môžu sa však použiť na všetky servery HTTP, ktoré podporujú CGI. Niektoré proprietárne servery, ako napríklad servery od spoločností Microsoft a Netscape, môžu mať ďalšie funkcie alebo môžu fungovať odlišne. Ako sa tvár webu neustále mení neuveriteľnou rýchlosťou, štandardy sa stále vyvíjajú a budúcnosť sa určite zmení. Čo sa však CGI týka, zdá sa, že táto technológia je dobre zavedená – cena za to je tá, že ju nahradili iné technológie, ako napríklad applety. Akékoľvek CGI programy, ktoré napíšete pomocou týchto informácií, budú takmer určite schopné bežať na väčšine webových serverov ešte mnoho rokov.
Keď je program CGI vyvolaný prostredníctvom formulára, najbežnejšieho rozhrania, prehliadač odošle serveru dlhý reťazec, ktorý začína cestou k programu CGI a jeho názvom. Potom nasledujú rôzne ďalšie údaje, nazývané informácie o ceste, ktoré sú odovzdané programu CGI cez premennú prostredia PATH_INFO (obrázok 9-1). Za informáciou o ceste nasleduje znak „?“, za ktorým nasledujú údaje formulára, ktoré sa odosielajú na server pomocou metódy HTTP GET. Tieto údaje sú sprístupnené programu CGI prostredníctvom premennej prostredia QUERY_STRING. Všetky údaje, ktoré stránka odošle pomocou najčastejšie používanej metódy HTTP POST, budú odovzdané programu CGI cez štandardný vstup. Typický reťazec, ktorý môže server prijať z prehliadača, je znázornený na obrázku 1. 9-1. pomenovaný program formread v katalógu cgi-bin volaný serverom s dodatočnými informáciami o ceste extra informácia a choice=help request data – pravdepodobne ako súčasť pôvodnej adresy URL. Nakoniec sa samotné údaje formulára (text "CGI programovanie" v poli "kľúčové slová") odosielajú prostredníctvom metódy HTTP POST.
Premenné prostredia
Keď server vykonáva program CGI, najprv mu odovzdá nejaké údaje, aby sa spustil vo forme premenných prostredia. V špecifikácii je oficiálne definovaných sedemnásť premenných, ale mnohé ďalšie sa neoficiálne používajú prostredníctvom nižšie opísaného mechanizmu s názvom HTTP_/nec/zams/n. CGI program
má prístup k týmto premenným rovnako ako všetky premenné prostredia shellu pri spustení z príkazového riadku. Napríklad v shell skripte je možné pristupovať k premennej prostredia F00 ako $F00; v Perle toto volanie vyzerá ako $ENV("F00") ; v C - getenv("F00") ; Tabuľka 9-1 uvádza zoznam premenných, ktoré vždy nastavuje server, aj keď sú nulové. Okrem týchto premenných sú dáta vrátené klientom v hlavičke požiadavky priradené premenným v tvare HTTP_F00 , kde F00 je názov hlavičky. Napríklad väčšina webových prehliadačov obsahuje informácie o verzii v hlavičke s názvom USEfl_AGENT . Váš rámec CGI npor môže získať tieto informácie z premennej HTTP_USER_AGENT.
Tabuľka 9-1.premenné prostredia CGI
premenná prostredia |
Popis |
||
CONTENT_LENGTH |
Dĺžka údajov odovzdaných metódami POST alebo PUT v bajtoch. |
||
DRUH OBSAHU |
Typ MIME údajov pripojených pomocou metód POST alebo PUT. |
||
GATEWAY_INTERFACE |
Číslo verzie špecifikácie CGI podporovanej serverom. |
||
PATH_INFO |
Ďalšie informácie o ceste poskytnuté klientom. Napríklad na žiadosť http://www.myserver.eom/test.cgi/this/is/a/ cesta?pole=zelená hodnota premennej PATH_INFO bude /toto/je/a/cesta. |
||
PATH_TRANSLATED |
Rovnaké ako PATH_INFO, ale server vytvára všetko |
||
|
Možný preklad, napríklad, rozšírenie názvu ako "-account". » |
||
QUERY_STRING |
Všetky údaje po „?“ v adrese URL. Toto sú tiež údaje odovzdané, keď je REQ-UEST_METHOD formulára GET. |
||
REMOTE_ADDR |
IP adresa klienta, ktorý požaduje. |
||
VZDIALENÝ HOSTITEĽ |
Názov hostiteľa klientskeho počítača, ak je dostupný. |
||
REMOTE_IDENT |
Ak webový server a klient podporujú identifikáciu typu identd, potom je to používateľské meno účtu, ktorý podáva požiadavku. |
||
REQUEST_METHOD |
Metóda, ktorú klient použil na vytvorenie požiadavky. Pre programy CGI, ktoré sa chystáme vytvoriť, to bude zvyčajne POST alebo GET. |
||
NÁZOV SERVERA | Názov hostiteľa – alebo IP adresa, ak názov nie je dostupný – počítača, na ktorom beží webový server. | ||
PORT SERVERA | Číslo portu používané webovým serverom. | ||
SERVER_PROTOCOL |
Protokol, ktorý klient používa na komunikáciu so serverom. V našom prípade je tento protokol takmer vždy HTTP. | ||
SERVER_SOFTWARE | Informácie o verzii webového servera, na ktorom je spustený program CGI. | ||
SCRIPT_NAME |
Cesta ku skriptu, ktorý sa má vykonať, podľa špecifikácie klienta. Dá sa použiť, keď adresa URL odkazuje sama na seba, takže skripty, na ktoré sa odkazuje na rôznych miestach, sa môžu vykonávať rôzne v závislosti od miesta. |
||
Tu je príklad skriptu Perl CGI, ktorý vydáva všetky premenné prostredia nastavené serverom, ako aj všetky staršie premenné, ako napríklad PATH, nastavené shellom, ktorý spustil server.
#!/usr/bin/perl -w
vytlačiť<< HTML;
Typ obsahu: text/html\n\n
HTML
foreach (klávesy %ENV) ( tlač "$_: $ENV($_)
\n" ;)
vytlačiť<
HTML
Všetky tieto premenné môžu byť použité a dokonca modifikované vaším CGI programom. Tieto zmeny však neovplyvnia webový server, ktorý spustil program.
Príkazový riadok
CGI umožňuje odovzdať argumenty programu CGI ako voľby príkazového riadku, čo sa používa len zriedka. Používa sa zriedka, pretože jeho praktické využitie je málo a nebudeme sa ním podrobne zaoberať. Pointa je, že ak premenná prostredia QUERY_STRING neobsahuje znak " = ", potom sa program CGI spustí s parametrami príkazového riadku prevzatými z QUERY_STRING . napr. http://www.myserver.com/cgi- bin/finger?root spustí koreň prsta na www.myserver.com.
Existujú dve hlavné knižnice, ktoré poskytujú rozhranie CGI pre Perl. Prvý z nich - cgi-lib.pl Utility cgi-lib.pl veľmi bežné, pretože to bola dlho jediná veľká dostupná knižnica. Je navrhnutá tak, aby fungovala v Perle 4, ale funguje aj v Perle 5. Druhá knižnica, CGI.pm, novšie a v mnohých smeroch lepšie cgi-lib.pl CGI.pm napísaný pre Perl 5 a používa plne objektovo orientovanú schému na prácu s údajmi CGI. modul CGI.pm analyzuje štandardný vstup a premennú QUERY_STRING a uloží údaje do objektu CGI. Váš program potrebuje iba vytvoriť nový objekt CGI a použiť jednoduché metódy ako paramQ na extrahovanie údajov, ktoré potrebujete. Príklad 9-2 slúži ako krátka ukážka ako CGI.pm interpretuje údaje. Všetky príklady Perl v tejto kapitole budú použité CGI.pm.
Príklad 9-2.
Analýza údajov CGI v jazyku Perl
#!/usr/bin/perl -w
použite CGI qw(:štandard);
# Používa sa modul CGI.pm. qw(:štandardné) importy
# namespace štandardných funkcií CGI, ktoré sa majú získať
# kód čističa. To možno vykonať, ak skript
# je použitý iba jeden CGI objekt.
$mycgi = nové CGI; #Vytvorte CGI objekt, ktorý bude „bránou“ k údajom formulára
@fields = $mycgi->param; # Extrahujte názvy všetkých vyplnených polí formulára
hlavička tlače, start_html("CGI.pm test"); ft metódy "header" a "start_html",
# poskytnuté
# CGI.pm uľahčuje získanie kódu HTML.
# "header" vypíše požadovanú HTTP hlavičku, a
#"start_html" vypíše hlavičku HTML s daným názvom,
#a tiež značka
.tlačiť"<р>Údaje formulára:
";
foreach (@fields) ( print $_, ":",- $mycgi->param($_), "
"; }
# Pre každé pole zobrazte názov a hodnotu získanú pomocou
#
$mycgi->param("názov poľa").
print end_html; # Skratka pre výstup koncových značiek "".
Spracovanie vstupu v C
Keďže hlavné API pre MySQL a mSQL sú napísané v C, úplne neopustíme C v prospech Perlu, ale tam, kde je to vhodné, poskytneme niekoľko príkladov C. Existujú tri široko používané knižnice C na programovanie CGI: cgic Tom Boutell*; cgihtml Eugene Kim t a libcgi od EIT*. tomu veríme cgic je najkompletnejší a ľahko použiteľný. Chýba mu však možnosť vymenovať všetky premenné formulára, keď vám nie sú vopred známe. V skutočnosti sa dá pridať pomocou jednoduchého patchu, ale to je nad rámec tejto kapitoly. Preto v príklade 9-3 použijeme knižnicu cgihtml, zopakujte vyššie uvedený skript v jazyku C.
Príklad 9-3.Analýza údajov CGI v jazyku C
/*
cgihtmltest.c - Všeobecný CGI program na tlač kľúčov a ich hodnôt
z údajov prijatých z formulára */
#include
#include "cgi-lib.h" /* Toto obsahuje všetky definície funkcií CGI */
#include "html-lib.h" /* Obsahuje "všetky definície pomocných funkcií pre HTML */
void print_all(lllist 1)
/* Tieto funkcie vypisujú údaje odoslané z formulára v rovnakom formáte ako vyššie uvedený skript v jazyku Perl. Cgihtml tiež poskytuje vstavanú funkciu
Print_entries(), ktorá robí to isté s použitím formátu zoznamu HTML. */ (
uzol*okno;
/* Typ "uzol" je definovaný v knižnici cgihtml a odkazuje na prepojený zoznam, ktorý obsahuje všetky údaje formulára. */
okno = i.hlava; /* Nastaví ukazovateľ na začiatok údajov formulára */
while (okno != NULL) ( /* Prejdite prepojeným zoznamom k poslednému (prvému prázdnemu) prvku */
printf(" %s:%s
\n",okno->zaznam.nazov,nahradit_ltgt(okno->zaznam.hodnota));
/* Výstupné dáta. Replace__ltgt() je funkcia, ktorá rozumie kódovaniu HTML textu a zaisťuje jeho správne zobrazenie v klientskom prehliadači. */
okno = okno->dalsie; /* Presun na ďalší prvok v zozname. */
} }
int main() (
zoznam položiek; /* Ukazovateľ na analyzované údaje*/
stav int; /* Celé číslo predstavujúce stav */
html_header(); /* Pomocná funkcia HTML, ktorá vypíše hlavičku HTML */
html_begin("cgihtml test");
/* Pomocná funkcia HTML, ktorá vypíše začiatok stránky HTML so zadaným nadpisom. */
status = read_cgi_input(&záznamy); /* Vykonáva vstup a analýzu údajov formulára */
printf("<р>Údaje formulára:
");
print_all (záznamy); /* Volá funkciu print_all() definovanú vyššie. */
html_end(); /* Pomocná funkcia HTML, ktorá zobrazuje koniec stránky HTML. */
List_clear(&entries); /* Uvoľní pamäť obsadenú údajmi formulára. */
návrat 0; )
Štandardné výstupné zariadenie
Dáta odoslané programom CGI na štandardný výstup sú načítané webovým serverom a odoslané klientovi. Ak názov skriptu začína na nph-,údaje sa odosielajú priamo klientovi bez zásahu webového servera. V tomto prípade musí program CGI vygenerovať platnú hlavičku HTTP, ktorej bude klient rozumieť. V opačnom prípade nechajte webový server vygenerovať hlavičku HTTP za vás.
Aj keď nepoužívate nph-script, musíte dať serveru jeden príkaz, ktorý mu povie informácie o vašom vydaní. Zvyčajne ide o hlavičku HTTP Content-Type, ale môže to byť aj hlavička Location. Za nadpisom musí nasledovať prázdny riadok, t. j. nový riadok alebo kombinácia CR/LF.
Hlavička Content-Type informuje server o tom, aký typ údajov poskytuje váš program CGI. Ak ide o stránku HTML, reťazec by mal byť Content-Type: text/html. Hlavička Location informuje server o inej adrese URL – alebo inej ceste na tom istom serveri – kam má nasmerovať klienta. Názov by mal vyzerať takto: Miesto: http:// www. môj server. com/other/place/.
Po hlavičkách HTTP a prázdnom reťazci môžete odoslať skutočné údaje, ktoré váš program vytvorí - HTML stránku, obrázok, text alebo čokoľvek iné. Medzi CGI programami, ktoré prichádzajú so serverom Apache, sú nph-test-cgi a test cgi, ktoré dobre demonštrujú rozdiel medzi nadpismi nph a non-nph.
V tejto časti budeme používať knižnice CGI.pm a cgic, ktoré majú funkcie na výstup hlavičiek HTTP aj HTML. To vám umožní sústrediť sa na výstup skutočného obsahu. Tieto pomocné funkcie sú použité v príkladoch skôr v tejto kapitole.
Dôležité vlastnosti CGI skriptov
V podstate už viete, ako CGI funguje. Klient odosiela dáta, zvyčajne prostredníctvom formulára, na webový server. Server spustí program CGI a odovzdá mu údaje. Program CGI vykoná svoje spracovanie a vráti svoj výstup na server, ktorý ho odošle klientovi. Teraz, od pochopenia toho, ako fungujú rámce CGI-npor, musíme prejsť k pochopeniu, prečo sú tak široko používané.
Hoci z tejto kapitoly už viete dosť na zostavenie jednoduchého fungujúceho CGI programu, je tu ešte niekoľko dôležitých vecí, ktoré je potrebné zvážiť predtým, ako budete môcť napísať skutočne fungujúce programy pre MySQL alebo mSQL. Najprv sa musíte naučiť pracovať s viacerými formulármi. Potom sa musíte naučiť niektoré bezpečnostné opatrenia, ktoré zabránia útočníkom získať nelegálny prístup k súborom vášho servera alebo ich zničiť.
Stavová pamäť
Stavovosť je životne dôležitým prostriedkom poskytovania dobrých služieb vašim používateľom, a to nielen v boji proti tvrdým zločincom, ako by sa mohlo zdať. Problém je spôsobený tým, že HTTP je takzvaný „bezpamäťový“ protokol. To znamená, že klient odošle dáta na server, server vráti dáta klientovi a potom si každý ide svojou cestou. Server neukladá údaje o klientovi, ktoré môžu byť potrebné v nasledujúcich operáciách. Rovnako nie je zaručené, že si klient uloží akékoľvek údaje o transakcii, ktoré môže neskôr použiť. To znamená okamžité a významné obmedzenie používania World Wide Web.
Skriptovanie CGI podľa tohto protokolu je analogické tomu, že si nemôžete zapamätať konverzáciu. Vždy, keď sa s niekým rozprávate, bez ohľadu na to, ako často ste sa s ním predtým rozprávali, musíte sa predstaviť a nájsť spoločnú tému, o ktorej sa budete rozprávať. Netreba dodávať, že to neprospieva produktivite. Obrázok 9-2 ukazuje, že zakaždým, keď požiadavka dosiahne program CGI, je to úplne nová inštancia programu bez spojenia s predchádzajúcim.
Na strane klienta sa s príchodom Netscape Navigator objavilo ošúchané riešenie s názvom cookies. Pozostáva z vytvorenia novej hlavičky HTTP, ktorú možno posielať tam a späť medzi klientom a serverom, podobne ako hlavičky Content-Type a Location. Klientsky prehliadač musí po prijatí hlavičky cookie uložiť údaje do cookie, ako aj názov domény, v ktorej cookie funguje. Potom vždy, keď sa navštívi URL v rámci špecifikovanej domény, hlavička cookie sa musí vrátiť na server na použitie v programoch CGI na tomto serveri.
Metóda cookie sa používa najmä na uloženie ID používateľa. Informácie o návštevníkoch môžu byť uložené v súbore na serveri. Jedinečné ID tohto používateľa môže byť odoslané ako súbor cookie do prehliadača používateľa, po ktorom zakaždým, keď používateľ navštívi stránku, prehliadač automaticky odošle toto ID na server. Server odovzdá ID programu CGI, ktorý otvorí príslušný súbor a získa prístup ku všetkým údajom o používateľovi. To všetko sa deje spôsobom, ktorý je pre používateľa neviditeľný.
Akokoľvek je táto metóda užitočná, väčšina veľkých stránok ju nepoužíva ako jediný prostriedok na zapamätanie stavu. Existuje na to viacero dôvodov. Po prvé, nie všetky prehliadače podporujú súbory cookie. Donedávna hlavný prehliadač pre zrakovo postihnutých (nehovoriac o ľuďoch so slabou rýchlosťou siete) – Lynx – nepodporoval súbory cookie. Stále ich „oficiálne“ nepodporuje, hoci niektoré z jej široko dostupných „bočných pobočiek“ áno. Po druhé, a čo je dôležitejšie, súbory cookie spájajú používateľa s konkrétnym počítačom. Jednou z veľkých predností webu je, že je prístupný odkiaľkoľvek na svete. Bez ohľadu na to, kde bola vaša webová stránka vytvorená alebo uložená, môže byť zobrazená z akéhokoľvek zariadenia pripojeného k internetu. Ak sa však pokúsite o prístup na stránku s povolenými súbormi cookie zo zariadenia niekoho iného, všetky vaše osobné údaje, ktoré súbor cookie podporoval, sa stratia.
Mnoho stránok stále používa súbory cookie na prispôsobenie používateľských stránok, ale väčšina z nich ich dopĺňa tradičným rozhraním v štýle prihlasovania/hesla. Ak sa na stránku pristupuje z prehliadača, ktorý nepodporuje cookies, tak stránka obsahuje formulár, do ktorého používateľ zadá prihlasovacie meno a heslo, ktoré mu bolo pridelené pri prvej návšteve stránky. Zvyčajne je táto forma malá a skromná, aby neodstrašila väčšinu používateľov, ktorí nemajú záujem o žiadnu personalizáciu, ale chcú ísť jednoducho ďalej. Keď užívateľ zadá do formulára prihlasovacie meno a heslo, CGI nájde užívateľský dátový súbor, ako keby meno bolo odoslané s cookie. Pomocou tejto metódy sa používateľ môže zaregistrovať na personalizovanej webovej stránke odkiaľkoľvek na svete.
Okrem úloh účtovania preferencií používateľov a dlhodobého uchovávania informácií o nich možno uviesť jemnejší príklad zapamätania stavu, ktorý poskytujú populárne vyhľadávacie nástroje. Keď vyhľadávate pomocou služieb, ako sú AltaVista alebo Yahoo, zvyčajne získate oveľa viac výsledkov, než môžete zobraziť v ľahko čitateľnom formáte. Tento problém je vyriešený zobrazením malého počtu výsledkov – zvyčajne 10 alebo 20 – a poskytnutím niektorých prostriedkov navigácie na zobrazenie ďalšej skupiny výsledkov. Aj keď sa toto správanie zdá bežné a očakávané pre priemerného používateľa webu, skutočná implementácia nie je triviálna a vyžaduje si zapamätanie stavu.
Keď používateľ prvýkrát zadá požiadavku na vyhľadávací nástroj, zhromaždí všetky výsledky, ktoré môžu podliehať určitému vopred definovanému limitu. Trik je poskytnúť tieto výsledky súčasne v malom množstve, pričom si zapamätáte, aký druh používateľa tieto výsledky požadoval a akú časť očakáva ďalej. Ak odhliadneme od zložitosti samotného vyhľadávača, stojíme pred problémom dôsledne poskytnúť používateľovi nejaké informácie na jednej stránke. Zoberme si príklad 9-4, ktorý ukazuje CGI skript, ktorý vydáva desať riadkov súboru a umožňuje mu pozrieť sa na nasledujúcich alebo predchádzajúcich desať riadkov.
Príklad 9-4. Ukladanie stavu v CGI skripte
#!/usr/bin/perl -w
používať CGI;
Open(F,"/usr/dict/words") or die("Nedá sa otvoriť! $!");
#Toto je súbor, ktorý bude výstupom, môže to byť čokoľvek.
$výstup = nové CGI;
sub print_range ( # Toto je hlavná funkcia programu, my $start = shift;
# Počiatočný riadok súboru, môj $count = 0;
# Ukazovateľ, môj riadok $ = "";
# Aktuálny riadok súboru, vytlačiť $output->header,
$output->start_html("Môj slovník");
#
Vygeneruje HTML s názvom „Môj slovník“, vytlačí „
zatiaľ čo (($count< $start) and ($line =
# Preskočte všetky riadky pred začiatkom, zatiaľ čo (($count< $start+10) and
($line ?
#
Vytlačte ďalších 10 riadkov.
moje $nové ďalšie = $začiatok+10; moje $newprev = $start-10;
# Nastavte počiatočné reťazce pre adresy URL „Nasledujúca“ a „Predchádzajúca“,
tlačiť"
";
If ($start == 0) ( # Enable "Previous" URL, if you
# už nie je na začiatku.
print qq%Previous%; )
If (eof) ( # Include "Next" URL, pokiaľ #
nie na konci súboru.
tlačiť qq%Next%;
}
vytlačiť "HTML;HTML
exit(0); )
# Ak neexistujú žiadne údaje, začnite odznova,
if (nie $output->param) (
&print_range(0); )
# V opačnom prípade začnite od reťazca uvedeného v údajoch.
&print_range($output->param("start"));
V tomto príklade sa zapamätanie stavu vykonáva pomocou najjednoduchšej metódy. S ukladaním dát nie je problém, keďže ich uchovávame v súbore na serveri. Potrebujeme len vedieť, odkiaľ začať výstup, takže skript jednoducho obsahuje počiatočný bod pre ďalšiu alebo predchádzajúcu skupinu riadkov v adrese URL, čo je všetko, čo je potrebné na vygenerovanie ďalšej stránky.
Ak však potrebujete viac než len prechádzať súborom, spoliehanie sa na adresu URL môže byť ťažkopádne. Tento problém môžete zmierniť použitím formulára HTML a zahrnutím údajov o stave do značiek. SKRYTÝ typ. Túto techniku s úspechom používa mnoho stránok, čo vám umožňuje prepojiť súvisiace programy CGI alebo rozšíriť používanie jedného programu CGI, ako v predchádzajúcom príklade. Namiesto odkazovania na konkrétnu entitu, ako je napríklad domovská stránka, môžu údaje adresy URL odkazovať na automaticky vygenerované ID používateľa.
Takto funguje AltaVista a iné vyhľadávače. Prvé vyhľadávanie vygeneruje ID používateľa, ktoré je implicitne zahrnuté v nasledujúcich adresách URL. Toto ID je spojené s jedným alebo viacerými súbormi obsahujúcimi výsledky dotazu. V URL sú zahrnuté ďalšie dve hodnoty: aktuálna pozícia vo výslednom súbore a smer, ktorým sa v ňom chcete posunúť ďalej. Tieto tri hodnoty sú všetko, čo je potrebné na spustenie výkonných navigačných systémov veľkých vyhľadávačov.
Chýba však niečo iné. Súbor použitý v našom príklade /usr/diéta/slova veľmi veľký. Čo ak ju necháme uprostred čítania, no chceme sa k nej vrátiť neskôr? Ak si nepamätáte URL nasledujúcej stránky, nie je možné sa vrátiť späť, ani AltaVista vám to nedovolí. Ak reštartujete počítač alebo začnete pracovať z iného, nie je možné vrátiť sa k predchádzajúcim výsledkom vyhľadávania bez opätovného zadania dopytu. Táto dlhodobá stavovosť je však jadrom personalizácie webovej stránky, o ktorej sme hovorili vyššie, a oplatí sa vidieť, ako ju možno využiť. Príklad 9-5 je modifikovaná verzia príkladu 9-4.
Príklad 9-5.
Trvalá stavová pamäť
#!/usr/bin/perl -w
používať CGI;
umask 0;
Open(F,"/usr/dict/words") or die("Nedá sa otvoriť! $!");
Chdir("users") or die("Nemôžem prejsť do adresára $!");
#
Toto je adresár, kde budú uložené všetky údaje
# o používateľovi.
Výstup = nové CGI;
if (nie $output->param) (
vytlačiť $output->header,
$output->start_html("Môj slovník");
vytlačiť "HTML;