Webová stránka rekonštrukcie kúpeľne. Užitočné rady

Príklady CG. Elektronický obchod - čo to je

Kapitola 9.

Programovanie pomocou CGI

Zahrnutie časti o CGI do databázovej knihy sa môže zdať rovnako zvláštne ako mať v kuchárskej knihe kapitolu o oprave áut. 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 údaje – text, obrázky a zvuk. - cez internet. WWW pozostával 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.


Zadajte svoje meno:



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 podporované HTML 3.2, dnes najpoužívanejším štandardom. 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.


Táto značka ukazuje na začiatok formulára. Na konci formulára sa vyžaduje uzatváracia značka

. Medzi značkami
Povolené sú tri atribúty: ACTION špecifikuje URL alebo relatívnu cestu k CGI programu, do ktorého budú dáta odoslané; METHOD špecifikuje HTTP metódu, ktorou sa formulár odošle (môže to byť GET alebo POST, ale takmer vždy použijeme POST); ENCTYPE špecifikuje metódu kódovania údajov (malo by sa použiť len vtedy, ak jasne rozumiete tomu, čo robíte).


Poskytuje najflexibilnejší spôsob vstupu používateľa. V skutočnosti existuje deväť rôznych typov značiek . Typ je určený atribútom TYPE. Predchádzajúci príklad používa dve značky : štandardne jeden typu SUBMIT a druhý typu TEXT. Deväť typov je nasledovných:

TEXT

Pole, do ktorého používateľ zadá jeden riadok textu.

HESLO

Rovnaké ako TEXT, ale zadaný text sa nezobrazuje na obrazovke.

CHECKBOX

Príznak, ktorý môže používateľ nastaviť a vymazať.

RÁDIO

Prepínač, ktorý musí byť kombinovaný s aspoň jedným ďalším prepínačom. Používateľ si môže vybrať iba jednu z nich.

PREDLOŽIŤ

Tlačidlo, ktoré po kliknutí odošle formulár na webový server.

RESETOVAŤ

Tlačidlo, ktoré po kliknutí obnoví formulár na predvolené hodnoty.

FILE

Podobné ako textové pole, ale vyžaduje zadanie názvu súboru, ktorý sa odošle na server.

SKRYTÝ

Neviditeľné pole, ktoré môže uchovávať údaje.

IMAGE

Podobne ako pri tlačidle ODOSLAŤ, ale na tlačidle môžete nastaviť obrázok pre obrázok.

Okrem značiek atribútu TYPE zvyčajne majú atribút NAME, ktorý spája údaje zadané do poľa s nejakým názvom. Názov a údaje sa odosielajú na server v štýle hodnota=hodnota. V predchádzajúcom príklade bolo textové pole pomenované krstné meno . Atribút VALUE môžete použiť na nastavenie polí typu TEXT, PASSWORD, FILE a HIDDEN na preddefinované hodnoty. Rovnaký atribút, ktorý sa používa s tlačidlami ako SUBMIT alebo RESET, na nich zobrazuje zadaný text. Polia typu RADIO a CHECKBOX je možné zobraziť ako nastavené pomocou atribútu CHECKED bez hodnoty.

Atribút SIZE sa používa na nastavenie dĺžky polí TEXT, PASSWORD a FILE. Atribút MAXLENGTH možno použiť na obmedzenie dĺžky zadávaného textu. Atribút SRC určuje adresu URL obrázka použitého v type IMAGE. Nakoniec atribút ALIGN určuje zarovnanie obrázka pre typ IMAGE a môže byť TOP, MIDDLE, BOTTOM (predvolené), LEFT alebo RIGHT (hore, uprostred, dole, vľavo, vpravo).

.

Ako značka , na štítku a akýkoľvek text medzi značkami bude akceptovaný ako predvolený text , podobne ako atribút VALUE pre značku . Pre Tag

, ktoré dáva miesto na zadanie eseje. Údaje sa nazývajú „esej“. Blok textu má šírku 70 znakov a hĺbku 10 riadkov. Medzera medzi značkami

možno použiť ako vzorovú esej. -->

typu „SUBMIT“ a „RESET“. Tlačidlo „ODOSLAŤ“ má prepísaný štítok „Zadať údaje“ a tlačidlo „RESETOVAŤ“ má predvolený štítok (definovaný prehliadačom). Kliknutím na tlačidlo „ODESLAŤ“ odošlete údaje na webový server, tlačidlom „RESET“ obnovíte údaje R do pôvodného stavu, pričom sa vymažú všetky údaje zadané používateľom. -->


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, preto je rozumné sa mu vyhnúť, pokiaľ váš web nemá bohatý grafický štýl.

Teraz, keď ste oboznámení so základmi HTML formulárov, ste pripravení preskúmať samotné CGI.

Špecifikácia CGI

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 vykoná 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. Keďže 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 týka CGI, 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 metódy HTTP POST, ktorá je najčastejšie používaná, 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á“) odošlú 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 premenné, 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=zelena 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ď má REQ-UEST_METHOD formulára hodnotu GET.

REMOTE_ADDR

IP adresa klienta, ktorý žiada.

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 spúšťať odlišne v závislosti od miesta.

Tu je príklad skriptu Perl CGI, ktorý vytlačí 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

<р>Premenné prostredia

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íklad, 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ý len jeden CGI objekt.

$mycgi = nové CGI; #Vytvorte objekt CGI, ktorý bude „bránou“ k údajom formulára

@fields = $mycgi->param; # Extrahujte názvy všetkých vyplnených polí formulára

vytlačiť hlavičku, 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é, uvedieme niekoľko príkladov C. Na programovanie CGI existujú tri široko používané knižnice C: 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 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" /* Toto 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->dalsi; /* 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(entries); /* Volá funkciu print_all() definovanú vyššie. */

html_end(); /* Pomocná funkcia HTML, ktorá vypíše 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 sú odosielané 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 jednu direktívu, 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, 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 programami CGI, ktoré sa dodávajú 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 to, aby ste dali dohromady jednoduchý fungujúci CGI program, je tu niekoľko dôležitejší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 Navigatoru 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, kedykoľvek 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 hlavne 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á prihlasovacie meno a heslo do formulára, 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ľa a dlhodobého uchovávania informácií o ňom možno uviesť jemnejší príklad zapamätania stavu, ktorý poskytujú populárne vyhľadávače. Keď vyhľadávate pomocou služieb, ako je 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 určitý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;

# Začiatočný riadok súboru, môj $count = 0;

# Ukazovateľ, môj $riadok = "";

# Aktuálny riadok súboru, vytlačte $output->header,

$output->start_html("Môj slovník");

# Vygeneruje HTML s názvom „Môj slovník“, vytlačí „ \n";

zatiaľ čo (($count< $start) and ($line = )) ( $count++; )

# Preskočte všetky riadky pred začiatkom, zatiaľ čo (($count< $start+10) and ($line ? )) ( vytlačiť $riadok; $počet++; )

# 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) ( # Zahrňte „Ďalšiu“ adresu 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 metódu s úspechom použili mnohé stránky, č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, ale 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;


<р>Zadajte svoje užívateľské meno:


HTML

exit(0); )

$user = $output->param("meno pouzivatela");

## Ak súbor používateľa neexistuje, vytvorte ho a nainštalujte

## počiatočná hodnota v "0",

if (nie -e "$user") (

open (U, ">$user") or die("Nedá sa otvoriť! $!");

vytlačiť U "0\n";

zatvorte U;

&print_range("0");

##, ak používateľ existuje a nie je uvedený v adrese URL

## počiatočná hodnota, prečítajte si poslednú hodnotu a začnite odtiaľ.

) elsif (nie $output->param("start")) (

Open(U,"User") or die("Nedá sa otvoriť používateľ! $!");

$štart = ; zatvorte U;

chomp $starl;

upprint range($start);

## Ak používateľ existuje a nie je uvedený v adrese URL

## počiatočná hodnota, napíšte počiatočnú hodnotu

## do užívateľského súboru a spustiť výstup.

) inak (

Open(U,">$user") or die("Nedá sa otvoriť užívateľ na písanie! $!");

print U $output->param("start"), "\n";

zatvorte U;

&print_range($output->param("začiatok 1)); )

sub print_range(

môj $štart = posun;

môj $počet = 0;

môj $line = " "

vytlačiť $output->header,

$output->start_html(" Môj slovník ");

tlačiť"

\n"; 

zatiaľ čo (($count< $start) and ($line = )) ( $count++; )

zatiaľ čo (($count< $start+10) and ($line = ))

vytlačiť $riadok; $pocet++;

moje $nové ďalšie = $začiatok+10;

moje $newprev = $start-10;

tlačiť"

pokiaľ (Začiatok == 0)

{

vytlačiť

qq%

predchádzajúce %;

}

pokiaľ (eof) ( print qq%Next%;

# Všimnite si, že používateľské meno „username“ je pripojené k adrese URL.

# V opačnom prípade CGI zabudne, s ktorým používateľom má do činenia.

}

vytlač $output->end_html;

exit(0") ;

}

Bezpečnostné opatrenia

Pri prevádzke internetových serverov, či už HTTP alebo iných, je bezpečnosť najdôležitejším problémom. Výmena údajov medzi klientom a serverom, vykonávaná v rámci

CGI nastoľuje množstvo dôležitých otázok súvisiacich s ochranou údajov. Samotný protokol CGI je pomerne bezpečný. Program CGI prijíma vstup zo servera prostredníctvom štandardného vstupu alebo premenných prostredia, pričom obe sú bezpečné. Ale akonáhle má CGI program pod kontrolou dáta, jeho akcie sú neobmedzené. Zle napísaný program CGI môže útočníkovi umožniť získať prístup k systému servera. Zvážte nasledujúci príklad programu CGI:

#!/usr/bin/perl -w

používať CGI;

môj $výstup = nové CGI;

moje $username = $output"param("username");

vytlačiť $output->header, $output->start_html("Výstup prstom"),

"

", "finger $username", "
", $output->end_html;

Tento program poskytuje príkazu platné rozhranie CGI prstom. Ak spustíte program rovnako ako finger.cgi, zobrazí zoznam všetkých aktuálnych používateľov na serveri. Ak to spustíte ako finger.cgi?username=fred, potom sa na serveri zobrazia informácie o používateľovi „fred“. Môžete to dokonca spustiť ako prstom. oo.com na zobrazenie informácií o vzdialenom používateľovi. Ak to však spustíte ako finger.cgi?username=fred; sa môžu stať nechcené veci. Operátor backstroke """ " v Perle vytvorí proces shellu a vykoná príkaz, ktorý vráti výsledok. V tomto programe" prst $username* používa sa ako jednoduchý spôsob vykonania príkazu prsta a získania jeho výstupu. Väčšina shellov však umožňuje kombinovať viacero príkazov na rovnakom riadku. Napríklad každý procesor, ako je procesor Bourne, to robí s "; ". Preto"finger fred;mail najprv spustite príkaz prst a potom príkaz pošty ktorý môže poslať celý súbor hesiel servera nežiaducemu používateľovi.

Jedným z riešení je analyzovať údaje formulára a hľadať škodlivý obsah. Môžete, povedzme, vyhľadať symbol ";" a vymažte všetky znaky za ním. Alternatívnymi metódami je možné takýto útok znemožniť. Vyššie uvedený program CGI je možné prepísať takto:

#!/usr/local/bin/perl -w

používať CGI;

môj $výstup = nové CGI;

moje $username = $output->param("username");

$|++;

# Zakázať ukladanie do vyrovnávacej pamäte, aby sa všetky údaje odoslali klientovi,

print $output->header, $putput->start_html("Výstup prstom"), "

\n"; 

$pid = open(C_OUT, "-|");# Tento perlský idióm vytvorí podriadený proces a otvorí sa

# kanál medzi nadradenými a podradenými procesmi,

if ($pid) (# Toto je nadradený proces.

vytlačiť ; ft Vytlačí výstup podriadeného procesu.

tlačiť"

", $output->end_html;

exit(O); ft Ukončite program. )

elsif (definované $pid) ( # Toto je podriadený proces.

$|++; # Zakázať ukladanie do vyrovnávacej pamäte.

exec("/usr/bin/finger",$username) or die("volanie exec() zlyhalo.");

# Vykonajte prstový program s používateľským menom ako jediným
# argument príkazového riadku. ) else ( die("fork() failed"); )

# Kontrola chýb.

Ako vidíte, nejde o oveľa komplexnejší program. Ale ak to spustíte ako finger.cgi?username=fred; potom sa prstový program vykoná s argumentom fred;mail ako jedno používateľské meno.

Ako dodatočné bezpečnostné opatrenie tento skript spúšťa prst explicitne ako /usr/bin/finger. V nepravdepodobnom prípade, že webový server odovzdá vášmu programu CGI nezvyčajnú PATH, spustenie len prstom môže spôsobiť spustenie nesprávneho programu. Ďalšie bezpečnostné opatrenie možno vykonať preskúmaním premennej prostredia PATH a uistením sa, že má prijateľnú hodnotu. Je dobré odstrániť aktuálny pracovný adresár z PATH, pokiaľ si nie ste istí, že to tak nie je, keď v ňom skutočne potrebujete spustiť program.

Ďalšie dôležité bezpečnostné hľadisko sa týka používateľských práv. Webový server štandardne spúšťa program CGI s právami užívateľa, ktorý samotný server spustil. Zvyčajne ide o pseudopoužívateľa, napríklad „nikto“, ktorý má obmedzené práva, takže program CGI má tiež málo práv. To je zvyčajne dobrá vec, pretože ak má útočník prístup k serveru prostredníctvom programu CGI, nebude môcť spôsobiť veľa škody. Príklad krádeže hesla ukazuje, čo sa dá urobiť, ale skutočné poškodenie systému je zvyčajne obmedzené.

Spustenie ako obmedzený používateľ však tiež obmedzuje možnosti CGI. Ak CGI program potrebuje čítať alebo zapisovať súbory, môže tak urobiť len tam, kde má toto oprávnenie. Napríklad v druhom príklade stavu je súbor udržiavaný pre každého používateľa. Program CGI musí mať povolenie na čítanie a zápis do adresára obsahujúceho tieto súbory, nehovoriac o samotných súboroch. Môžete to urobiť vytvorením adresára ako rovnaký používateľ ako server, s oprávneniami na čítanie/zápis len pre tohto používateľa. Avšak pre používateľa ako „nikto“ má túto schopnosť iba root. Ak nie ste superužívateľ, budete musieť pri každej zmene v CGI komunikovať so správcom systému.

Ďalším spôsobom je sprístupniť adresár voľný na čítanie a zápis, čím sa z neho efektívne odstráni akákoľvek ochrana. Keďže jediný spôsob, ako sa k týmto súborom dostať z vonkajšieho sveta, je cez váš program, nebezpečenstvo nie je také veľké, ako by sa mohlo zdať. Ak sa však v programe nájde diera, vzdialený používateľ bude mať plný prístup ku všetkým súborom, vrátane možnosti ich zničiť. Okrem toho budú môcť tieto súbory upravovať aj legitímni používatelia pracujúci na serveri. Ak sa chystáte použiť túto metódu, všetci používatelia servera musia byť dôveryhodní. Otvorený adresár tiež používajte len pre súbory, ktoré potrebuje program CGI; inými slovami, nevystavujte nepotrebné súbory riziku.

Ak je toto vaša prvá skúsenosť s programovaním CGI, ďalšie vzdelávanie môže pokračovať rôznymi spôsobmi. Na túto tému boli napísané desiatky kníh, z ktorých mnohé nepredpokladajú žiadne znalosti programovania. Programovanie CGI na World Wide Web vydavateľstvo O "Reilly and Associates pokrýva materiál od jednoduchých scenárov v rôznych jazykoch až po skutočne úžasné triky a triky. Verejné informácie sú bohaté aj na WWW. Je dobré začať s CGI je skutočne jednoduché(Naozaj len o CGI) na http://www.jmarshall.com/easy/cgi/ .

CGI a databázy

Od začiatku éry internetu boli databázy vzájomne prepojené s vývojom World Wide Web. V praxi mnoho ľudí vníma web len ako jednu obrovskú databázu multimediálnych informácií.

Vyhľadávače poskytujú každodenný príklad výhod databáz. Vyhľadávač nechodí po celom internete a hľadá kľúčové slová v momente, keď o ne požiadate. Namiesto toho vývojári stránky používajú iné programy na vytvorenie obrovského indexu, ktorý slúži ako databáza, z ktorej vyhľadávač získava záznamy. Databázy ukladajú informácie spôsobom, ktorý umožňuje rýchle vyhľadávanie s náhodným prístupom.

Vďaka svojej nestálosti dávajú databázy webu ešte väčšiu silu: menia ho na potenciálne rozhranie pre čokoľvek. Napríklad správu systému je možné vykonávať na diaľku prostredníctvom webového rozhrania namiesto toho, aby sa administrátor musel prihlasovať do požadovaného systému. Pripojenie databáz k webu je jadrom novej úrovne interaktivity na internete.

Jeden z dôvodov, prečo sú databázy pripojené k webu, sa objavuje pravidelne: veľa svetových informácií je už v databázach. Databázy, ktoré existovali pred príchodom webu, sa nazývajú staršie databázy (na rozdiel od databáz, ktoré nie sú prepojené s webom a boli vytvorené v poslednej dobe, čo by sa malo nazývať „zlý nápad“). Mnohé spoločnosti (a dokonca aj jednotlivci) teraz čelia výzve poskytnúť prístup k týmto starým databázam cez web. Pokiaľ nie je vašou starou databázou MySQL alebo mSQL, táto téma nespadá do rozsahu tejto knihy.

Ako už bolo povedané, iba vaša predstavivosť môže obmedziť komunikáciu medzi databázami a webom. V súčasnosti sú na webe dostupné tisíce jedinečných a užitočných databáz. Typy databáz, ktoré fungujú mimo týchto aplikácií, sú celkom odlišné. Niektoré z nich používajú programy CGI ako rozhranie k databázovému serveru, ako je MySQL alebo mSQL. Tieto typy nás najviac zaujímajú. Iní používajú komerčné aplikácie na interakciu s populárnymi počítačovými databázami, ako sú Microsoft Access a Claris FileMaker Pro. A iní jednoducho pracujú s plochými textovými súbormi, čo sú tie najjednoduchšie možné databázy.

Tieto tri typy databáz možno použiť na vývoj užitočných webových stránok akejkoľvek veľkosti a zložitosti. Jedným z našich cieľov v niekoľkých nasledujúcich kapitolách bude priniesť výkon MySQL mSQL na web pomocou programovania CGI.

Vďaka World Wide Web môže takmer každý poskytnúť informácie na internete vo forme, ktorá lahodí oku a je vhodná na široké šírenie. Nepochybne ste surfovali po internete a videli iné stránky a teraz už pravdepodobne viete, že strašidelné skratky ako „HTTP“ a „HTML“ sú len skratky pre „Web“ a „spôsob vyjadrovania informácií na internete“. Možno už máte nejaké skúsenosti s prezentáciou informácií na internete.

Internet sa ukázal ako ideálne médium na šírenie informácií, o čom svedčí jeho nesmierna popularita a masívny rozvoj. Zatiaľ čo niektorí spochybňujú užitočnosť internetu a jeho rozšírený rozvoj a popularitu pripisujú najmä humbuku, internet je nesporne dôležitým médiom na prezentáciu všetkých druhov informácií. Nielenže existuje množstvo služieb na poskytovanie aktuálnych informácií (správy, počasie, športové podujatia v reálnom čase) a referenčných materiálov v elektronickej forme, ale aj značné množstvo údajov rôzneho druhu. Úrad IRS, ktorý distribuoval všetky svoje daňové formuláre z roku 1995 a ďalšie informácie prostredníctvom World Wide Web, nedávno priznal, že zo svojej webovej stránky dostáva poštu od fanúšikov. Kto by si myslel, že IRS niekedy dostane poštu od fanúšikov? Nebolo to preto, že jeho stránka bola dobre navrhnutá, ale preto, že sa ukázala ako skutočne užitočný nástroj pre tisíce, možno milióny ľudí.

Čo robí web jedinečným a tak atraktívnou informačnou službou? V prvom rade preto, že poskytuje hypermediálne rozhranie pre dáta. Zvážte pevný disk vášho počítača. Údaje sú zvyčajne vyjadrené lineárnym spôsobom, podobne ako systém súborov. Napríklad máte niekoľko priečinkov a v každom priečinku sú buď dokumenty, alebo iné priečinky. Web používa inú paradigmu na vyjadrenie informácií nazývanú hypermédiá. Hypertextové rozhranie pozostáva z dokumentu a odkazov. Odkazy sú slová, na ktoré sa klikne, ak chcete zobraziť ďalšie dokumenty alebo nájsť iné druhy informácií. Web rozširuje pojem hypertext o ďalšie typy médií, ako sú grafika, zvuky, videá (odtiaľ názov „hypermédiá“). Zvýraznenie textu alebo grafiky v dokumente vám umožňuje zobraziť súvisiace informácie o vybratom prvku v ľubovoľnom počte foriem.

Z tohto jednoduchého a jedinečného spôsobu prezentácie a distribúcie informácií môže profitovať takmer každý, od akademikov, ktorí chcú okamžite zdieľať údaje so svojimi kolegami, až po obchodníkov, ktorí zdieľajú informácie o svojej spoločnosti so všetkými. Aj keď je poskytovanie informácií mimoriadne dôležité, v posledných rokoch mnohí cítili, že získavanie informácií je rovnako dôležité.

Hoci web poskytuje jedinečné hypermediálne rozhranie pre informácie, existuje mnoho ďalších efektívnych spôsobov distribúcie údajov. Napríklad sieťové služby ako File Transfer Protocol (FTP) a diskusná skupina „Gopher“ existovali dávno pred príchodom World Wide Web. E-mail bol primárnym médiom pre komunikáciu a výmenu informácií cez internet a väčšinu ostatných sietí takmer od samého začiatku týchto sietí. Prečo sa internet stal takým populárnym spôsobom distribúcie informácií? Multimediálny aspekt internetu hmatateľne prispel k jeho bezprecedentnému úspechu, ale aby bol internet najefektívnejší, musí byť interaktívny.

Bez možnosti prijímať vstupy od používateľov a poskytovať informácie by bol web úplne statickým prostredím. Informácie budú dostupné iba vo formáte určenom autorom. To by podkopalo jednu z výpočtových možností vo všeobecnosti: interaktívne informácie. Napríklad, namiesto toho, aby ste nútili používateľa prechádzať viacerými dokumentmi, ako keby si prezeral knihu alebo slovník, by bolo lepšie umožniť používateľovi identifikovať kľúčové slová, ktoré ho zaujímajú. Používatelia si môžu prispôsobiť spôsob prezentácie údajov a nemusia sa spoliehať na pevnú štruktúru definovanú poskytovateľom obsahu.

Pojem „webový server“ môže byť zavádzajúci, pretože môže označovať fyzický stroj aj softvér, ktorý používa na interakciu s internetovými prehliadačmi. Keď prehliadač požaduje danú webovú adresu, najprv sa pripojí k zariadeniu cez internet a odošle softvéru webového servera požiadavku na dokument. Tento softvér beží nepretržite, čaká na takéto požiadavky a zodpovedajúcim spôsobom odpovedá.

Aj keď servery môžu odosielať a prijímať údaje, funkčnosť samotného servera je obmedzená. Napríklad najprimitívnejší server môže odoslať požadovaný súbor iba prehliadaču. Server zvyčajne nevie, čo má robiť s tým či oným dodatočným vstupom. Ak ISP nepovie serveru, ako má s týmito dodatočnými informáciami zaobchádzať, server bude vstup s najväčšou pravdepodobnosťou ignorovať.

Aby server mohol vykonávať aj iné operácie okrem vyhľadávania a odosielania súborov do internetového prehliadača, musíte vedieť, ako rozšíriť funkčnosť servera. Webový server napríklad nemôže prehľadávať databázu na základe kľúčového slova zadaného používateľom a vracať viacero zodpovedajúcich dokumentov, pokiaľ takáto schopnosť nebola na serveri nejakým spôsobom naprogramovaná.

Čo je CGI?

Common Gateway Interface (CGI) je rozhranie k serveru, ktoré vám umožňuje rozšíriť funkčnosť servera. Pomocou CGI môžete interaktívne pracovať s používateľmi, ktorí pristupujú na vašu stránku. Na teoretickej úrovni vám CGI umožňuje rozšíriť schopnosť servera analyzovať (interpretovať) vstup z prehliadača a vracať informácie na základe vstupu používateľa. Na praktickej úrovni je CGI rozhranie, ktoré umožňuje programátorovi písať programy, ktoré jednoducho komunikujú so serverom.

Ak chcete rozšíriť možnosti servera, zvyčajne by ste ho museli upraviť sami. Toto riešenie je nežiaduce, pretože vyžaduje pochopenie nižšej úrovne sieťového programovania internetového protokolu. Vyžadovalo by to tiež úpravu a prekompilovanie zdrojového kódu servera alebo napísanie vlastného servera pre každú úlohu. Povedzme, že chcete rozšíriť server tak, aby fungoval ako brána Web-to-e-mail (Web-to-e-mail), ktorá zachytáva vstup používateľa z prehliadača a posiela ho e-mailom inému používateľovi. Kód by sa musel vložiť na server, aby sa analyzoval vstup z prehliadača, poslal ho e-mailom inému používateľovi a odoslal odpoveď späť do prehliadača cez sieťové pripojenie.

Po prvé, takáto úloha vyžaduje prístup ku kódu servera, čo nie je vždy možné.

Po druhé, je to ťažké a vyžaduje si rozsiahle technické znalosti.

Po tretie, platí to len pre konkrétny server. Ak potrebujete presunúť svoj server na inú platformu, budete musieť spustiť alebo aspoň stráviť veľa času portovaním kódu na túto platformu.

Prečo CGI?

CGI ponúka prenosné a jednoduché riešenie týchto problémov. Protokol CGI definuje štandardný spôsob komunikácie programov s webovým serverom. Bez akýchkoľvek špeciálnych znalostí je možné napísať program v akomkoľvek strojovom jazyku, ktorý je prepojený a komunikuje s webovým serverom. Tento program bude fungovať so všetkými webovými servermi, ktoré rozumejú protokolu CGI.

CGI komunikácia prebieha štandardným vstupom a výstupom, čo znamená, že ak viete, ako tlačiť a čítať dáta pomocou vášho programovacieho jazyka, môžete napísať aplikáciu webového servera. Okrem analýzy vstupu a výstupu je programovanie CGI aplikácií takmer ekvivalentné programovaniu akejkoľvek inej aplikácie. Ak chcete napríklad naprogramovať program „Hello, World!“, použite tlačové funkcie vášho jazyka a formát definovaný pre programy CGI na vytlačenie príslušnej správy.

Výber programovacieho jazyka

Pretože CGI je všeobecné rozhranie, nie ste obmedzení na žiadny konkrétny strojový jazyk. Často kladenou dôležitou otázkou je, aké programovacie jazyky možno použiť na programovanie CGI? Môžete použiť akýkoľvek jazyk, ktorý vám umožňuje vykonávať nasledujúce činnosti:

  • vytlačiť na stdout
  • Čítanie zo štandardného vstupu
  • Čítanie z variabilných režimov

Takmer všetky programovacie jazyky a mnoho skriptovacích jazykov robí tieto tri veci a môžete použiť ktorúkoľvek z nich.

Jazyky spadajú do jednej z nasledujúcich dvoch tried: prekladané a tlmočené. Preložený jazyk, ako je C alebo C++, je zvyčajne menší a rýchlejší, zatiaľ čo interpretovaný jazyk, ako je Perl alebo Rexx, niekedy vyžaduje načítanie veľkého tlmočníka pri spustení. Okrem toho môžete distribuovať binárne kódy (kód preložený do strojového jazyka) bez zdrojového kódu, ak je váš jazyk preložiteľný. Distribúcia interpretovaných skriptov zvyčajne znamená distribúciu zdrojového kódu.

Pred výberom jazyka musíte najprv zvážiť svoje priority. Musíte zhodnotiť výhody rýchlosti a efektívnosti jedného programovacieho jazyka s jednoduchosťou programovania iného. Ak sa chcete naučiť ďalší jazyk, namiesto toho, aby ste používali jazyk, ktorý už poznáte, starostlivo zvážte výhody a nevýhody oboch jazykov.

Dva najbežnejšie používané jazyky na programovanie CGI sú C a Perl (oba sú zahrnuté v tejto knihe). Obe majú jasné výhody a nevýhody. Perl je veľmi vysokoúrovňový, ale výkonný jazyk, vhodný najmä na analýzu textu. Zatiaľ čo jednoduchosť použitia, flexibilita a výkon z neho robia atraktívny jazyk pre programovanie CGI, jeho relatívne veľká veľkosť a pomalšia prevádzka ho niekedy robia nevhodným pre niektoré aplikácie. Programy v jazyku C sú menšie, efektívnejšie a poskytujú riadenie systému na nižšej úrovni, ale je náročnejšie na programovanie, chýbajú im ľahké vstavané rutiny na spracovanie textu a je ťažšie ich ladiť.

Aký jazyk je najvhodnejší na programovanie CGI? Ten, ktorý považujete za pohodlnejší z hľadiska programovania. Obidve sú rovnako efektívne na programovanie CGI aplikácií a so správnymi knižnicami majú obe podobné schopnosti. Ak však máte ťažko dostupný server, môžete použiť menšie skompilované programy v jazyku C. Ak potrebujete rýchlo napísať aplikáciu, ktorá si vyžaduje veľa práce s textom, môžete namiesto toho použiť Perl.

Upozornenia

Existuje niekoľko dôležitých alternatív k aplikáciám CGI. Mnohé servery teraz obsahujú programovanie API, ktoré uľahčuje programovanie priamych serverových rozšírení na rozdiel od samostatných aplikácií CGI. Servery API sú zvyčajne efektívnejšie ako programy CGI. Iné servery obsahujú vstavané funkcie, ktoré dokážu spracovať špeciálne položky bez CGI, ako je napríklad párovanie databáz. Nakoniec, niektoré aplikácie môžu byť ovládané niektorými novými technológiami na strane klienta (a nie na strane servera), ako je napríklad Java. Stane sa CGI rýchlo zastaraným vzhľadom na také rýchle zmeny v technológii?

Sotva. CGI má oproti novším technológiám niekoľko výhod.

  • Je všestranný a prenosný. Aplikáciu CGI môžete napísať pomocou takmer akéhokoľvek programovacieho jazyka na akejkoľvek platforme. Niektoré z alternatív, ako napríklad serverové API, vás obmedzujú na určité jazyky a je oveľa ťažšie sa ich naučiť.
  • Je nepravdepodobné, že klientske technológie ako Java nahradia CGI, pretože existujú aplikácie, pre ktoré sú serverové aplikácie oveľa vhodnejšie na spustenie.
  • Mnohé z obmedzení CGI sú obmedzenia HTML alebo HTTP. Ako sa vo všeobecnosti vyvíjajú internetové štandardy, vyvíjajú sa aj možnosti CGI.

Zhrnutie

Rozhranie Common Gateway je protokol, pomocou ktorého programy komunikujú s webovými servermi. Všestrannosť CGI umožňuje programátorom písať programy brány v takmer akomkoľvek jazyku, aj keď existuje veľa kompromisov spojených s rôznymi jazykmi. Bez tejto schopnosti by bolo vytváranie interaktívnych webových stránok zložité, v najlepšom prípade by vyžadovalo úpravy servera a interaktivita by bola nedostupná pre väčšinu používateľov, ktorí nie sú správcami lokality.

Kapitola 2. Základy

Pred niekoľkými rokmi som vytvoril stránku pre univerzitu na Harvarde, kde ste mohli posielať svoje pripomienky k nim. V tom čase bol internet mladý a dokumentácia bola vzácna. Ako mnohí iní som sa pri učení CGI programovania spoliehal na stručnú dokumentáciu a programovací systém vytvorený inými. Hoci si tento spôsob štúdia vyžadoval určité hľadanie, veľa experimentov a vyvolával mnohé otázky, bol veľmi efektívny. Táto kapitola je ovocím mojej ranej práce s CGI (samozrejme s niekoľkými vylepšeniami).

Hoci úplné pochopenie a zvládnutie rozhrania spoločnej brány trvá nejaký čas, samotný protokol je pomerne jednoduchý. Každý, kto má nejaké základné programátorské zručnosti a je oboznámený s webom, sa môže rýchlo naučiť programovať pomerne zložité CGI aplikácie, tak ako som sa to naučil ja a iní pred niekoľkými rokmi.

Účelom tejto kapitoly je predstaviť základy CGI komplexným, aj keď stručným spôsobom. Každý koncept, o ktorom sa tu diskutuje, je podrobne predstavený v nasledujúcich kapitolách. Po preštudovaní tejto kapitoly však môžete hneď začať programovať CGI aplikácie. Keď dosiahnete túto úroveň, môžete sa naučiť detaily CGI, či už čítaním zvyšku tejto knihy, alebo jednoduchým experimentovaním na vlastnej koži.

Programovanie CGI môžete zredukovať na dve úlohy: získanie informácií z webového prehliadača a odoslanie informácií späť do prehliadača. Toto je pomerne intuitívne, keď sa naučíte bežné používanie CGI aplikácií. Používateľ je často vyzvaný, aby vyplnil formulár, napríklad aby vložil svoje meno. Keď používateľ vyplní formulár a stlačí Enter, tieto informácie sa odošlú do programu CGI. Program CGI potom musí tieto informácie previesť na to, čomu rozumie, vhodne ich spracovať a následne odoslať späť do prehliadača, či už ide o jednoduché potvrdenie alebo výsledok viacúčelového vyhľadávania v databáze.

Inými slovami, programovanie CGI vyžaduje pochopenie toho, ako získať vstup z internetového prehliadača a ako odoslať výstup späť. Čo sa stane medzi vstupnou a výstupnou fázou CGI programu, závisí od cieľa vývojára. Zistíte, že hlavná ťažkosť pri programovaní CGI spočíva v tomto prechodnom štádiu; potom, čo sa naučíte pracovať so vstupom a výstupom, to v podstate stačí na to, aby ste sa stali vývojárom CGI.

V tejto kapitole sa naučíte princípy vstupu a výstupu CGI, ako aj ďalšie základné zručnosti, ktoré budete potrebovať na písanie a používanie CGI, vrátane vecí, ako je vytváranie formulárov HTML a pomenovanie programov CGI. Táto kapitola sa zaoberá nasledujúcimi témami:

  • Tradičný program „Ahoj, Svet!“;
  • Výstup CGI: odosielanie informácií späť na zobrazenie v internetovom prehliadači;
  • Konfigurácia, inštalácia a spustenie aplikácie. Dozviete sa o rôznych platformách a webových serveroch;
  • Vstup CGI: Interpretácia informácií odoslaných webovým prehliadačom. Oboznámenie sa s niektorými užitočnými programovacími knižnicami na analýzu takéhoto vstupu;
  • Jednoduchý príklad: pokrýva všetky lekcie v tejto kapitole;
  • Stratégia programovania.

Vzhľadom na charakter tejto kapitoly sa niektorých tém dotknem len zľahka. Nebojte sa; všetky tieto témy sú oveľa hlbšie pokryté v iných kapitolách.

Ahoj svet!

Začnete tradičnou úvodnou programátorskou úlohou. Napíšete program, ktorý zobrazí "Hello, World!" vo vašom webovom prehliadači. Pred napísaním tohto programu musíte pochopiť, aké informácie webový prehliadač očakáva od programov CGI. Musíte tiež vedieť, ako spustiť tento program, aby ste ho videli v akcii.

CGI je jazykovo nezávislé, takže tento program môžete implementovať v akomkoľvek jazyku. Na preukázanie nezávislosti každého jazyka sa tu používa niekoľko rôznych jazykov. V Perle je program "Ahoj, svet!" uvedené v zozname 2.1.

Výpis 2.1. Ahoj svet! v jazyku Perl. #!/usr/local/bin/perl # Hello.cgi - Môj prvý CGI program print "Content-Type: text/html\n\n"; tlačiť" \n";tlač" Ahoj svet!"; vytlačiť"\n";tlač" \n";tlač"

Ahoj svet!

\n";tlač" \n";

Uložte tento program ako hello.cgi a nainštalujte ho na príslušné miesto. (Ak si nie ste istí, kde to je, nezúfajte; dozviete sa to v časti „Inštalácia a spustenie programu CGI“ ďalej v tejto kapitole.) Pre väčšinu serverov sa správny adresár nazýva cgi-bin . Teraz zavolajte program z webového prehliadača. Pre väčšinu to znamená otvorenie nasledujúceho Uniform Resource Locator (URL):

http://hostname/directoryname/hello.cgi

Hostname je názov vášho webového servera a directoryname je adresár, do ktorého ste vložili hello.cgi (pravdepodobne cgi-bin).

Rozdelenie hello.cgi

O hello.cgi je potrebné poznamenať niekoľko vecí.

Najprv použijete jednoduché príkazy na tlač. Programy CGI nevyžadujú žiadne špeciálne deskriptory súborov ani výstupné deskriptory. Ak chcete odoslať výstup do prehliadača, jednoducho vytlačte na stdout.

Po druhé, všimnite si, že obsah prvého tlačového výpisu (Content-Type: text/html) sa nezobrazuje vo vašom webovom prehliadači. Akékoľvek informácie, ktoré chcete, môžete odoslať späť do prehliadača (stránka HTML, grafika alebo zvuk), ale najprv musíte prehliadaču povedať, aké údaje odosielate. Tento riadok informuje prehliadač, aký druh informácií môže očakávať – v tomto prípade HTML stránku.

Po tretie, program sa volá hello.cgi. Nie vždy je potrebné použiť príponu .cgi s názvom vášho CGI programu. Hoci zdrojový kód mnohých jazykov používa aj príponu .cgi, nepoužíva sa na označenie typu jazyka, ale je to spôsob, akým server identifikuje súbor ako spustiteľný súbor, a nie ako súbor s obrázkom, súbor HTML. alebo textový súbor. Servery sú často nakonfigurované tak, aby sa pokúsili spustiť iba tie súbory, ktoré majú túto príponu, pričom zobrazujú obsah všetkých ostatných. Aj keď je použitie prípony .cgi voliteľné, stále sa považuje za osvedčený postup.

Vo všeobecnosti sa hello.cgi skladá z dvoch hlavných častí:

  • informuje prehliadač, aké informácie má očakávať (Typ obsahu: text/html)
  • povie prehliadaču, čo má zobraziť (Ahoj, svet!)

Ahoj svet! v C

Aby sme ukázali nezávislosť CGI programov od jazykov, výpis 2.2 ukazuje C ekvivalent programu hello.cgi.

Výpis 2.2. Ahoj svet! v C. /* hello.cgi.c - Ahoj, svet CGI */ #include int main() ( printf("Typ obsahu: text/html\r\n\r\n"); printf(" \n"); printf(" Ahoj svet!\n"); printf("\n"); printf(" \n"); printf("

Ahoj svet!

\n"); printf(" \n"); )

Poznámka

Všimnite si, že Perl verzia hello.cgi používa Content-Type print ": text/html\n\n "; Zatiaľ čo verzia C používa Printf(" Content-Type: text/html\r\n\r\n ");

Prečo Perl tlačí príkaz končí dvoma riadkami (\n), zatiaľ čo C printf končí dvoma návratmi vozíka a novým riadkom (\r\n)?

Formálne sa predpokladá, že hlavičky (všetky výstupy pred prázdnym riadkom) budú oddelené znakmi konca riadku a novými riadkami. Bohužiaľ, na počítačoch so systémom DOS a Windows, Perl prekladá \r ako ďalší nový riadok, nie ako návrat vozíka.

Hoci výnimka \rs v Perle je technicky nesprávna, bude fungovať takmer vo všetkých protokoloch a je tiež prenosná na všetky platformy. Preto vo všetkých príkladoch v jazyku Perl v tejto knihe používam na oddelenie hlavičiek nové riadky, nie konce a nové riadky.

Vhodné riešenie tohto problému je uvedené v kapitole 4, Záver.

Webový server ani prehliadač nezaujíma, v akom jazyku sa program píše. Hoci každý jazyk má výhody a nevýhody ako programovací jazyk CGI, najlepšie je použiť jazyk, ktorý vám najviac vyhovuje. (Výber programovacieho jazyka je podrobnejšie rozobraný v kapitole 1 "Common Gateway Interface (CGI)").

CGI výstup

Teraz sa môžeme bližšie pozrieť na problematiku odosielania informácií do webového prehliadača. Z príkladu „Hello, World!“ môžete vidieť, že webové prehliadače očakávajú dve sady údajov: hlavičku, ktorá obsahuje informácie, ako napríklad informácie, ktoré sa majú zobraziť (napr. Content-Type: riadok) a aktuálne informácie (to, čo sa zobrazuje na Webový prehliadač). Tieto dva bloky informácií sú oddelené prázdnym riadkom.

Hlavička sa nazýva hlavička HTTP. Poskytuje dôležité podrobnosti o informáciách, ktoré prehliadač dostane. Existuje niekoľko rôznych typov hlavičiek HTTP a najvšeobecnejší je ten, ktorý ste použili predtým: Content-Type: hlavička. Môžete použiť rôzne kombinácie hlavičiek HTTP oddelených znakmi konca riadku a novým riadkom (\r\n). Prázdny riadok oddeľujúci hlavičku od údajov sa skladá aj z návratu vozíka a nového riadku (prečo sú oba potrebné, je stručne popísané v predchádzajúcej poznámke a podrobne popísané v kapitole 4). O ďalších hlavičkách HTTP sa dozviete v kapitole 4; momentálne máte čo do činenia s hlavičkou Content-Type:.

Content-Type: Hlavička popisuje typ údajov, ktoré CGI vracia. Vhodný formát pre túto hlavičku je:

Content-Type: podtyp/typ

Kde podtyp/typ je správny typ MIME (Multipurpose Internet Mail Extensions). Najbežnejším typom MIME je typ HTML: text/html. Tabuľka 2.1 uvádza niekoľko bežných typov MIME, o ktorých sa bude diskutovať; úplnejší zoznam a analýza typov MIME je uvedená v kapitole 4.

Poznámka

MIME bol pôvodne vynájdený na opis obsahu tiel poštových správ. Stal sa pomerne bežným spôsobom prezentácie informácií typu Content-Type. Viac o MIME si môžete prečítať v RFC1521. RFC na internete znamená „Requests for Comments“, čo sú súhrny rozhodnutí, ktoré urobili skupiny na internete, ktoré sa snažia stanoviť štandardy. Výsledky RFC1521 si môžete pozrieť na nasledujúcej adrese: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Tabuľka 2.1. Niektoré bežné typy MIME. Typ MIME Popis Text/html Hypertext Markup Language (HTML) Textové/obyčajné textové súbory Obrázky/gif GIF grafické súbory Obrázok/jpeg JPEG komprimované grafické súbory Zvukové/základné zvukové súbory Sun *.au Zvukové/x-wav Windows* súbory wav

Po hlavičke a prázdnom riadku jednoducho vytlačíte údaje vo forme, akú potrebujete. Ak posielate HTML, vytlačte HTML tagy a údaje na stdout za hlavičkou. Môžete tiež odoslať grafiku, zvuk a ďalšie binárne súbory jednoduchým vytlačením obsahu súboru na stdout. Niektoré príklady sú uvedené v kapitole 4.

Inštalácia a spustenie programu CGI

Táto časť sa trochu odchyľuje od programovania CGI a hovorí o konfigurácii vášho webového servera na používanie CGI, inštalácii a spúšťaní programov. Budete oboznámení s rôznymi servermi pre rôzne platformy viac či menej podrobne, ale budete musieť hlbšie preštudovať dokumentáciu vášho servera, aby ste našli najlepšiu možnosť.

Všetky servery vyžadujú priestor pre serverové súbory a priestor pre dokumenty HTML. V tejto knihe sa oblasť servera nazýva ServerRoot a oblasť dokumentu je DocumentRoot. Na počítačoch so systémom UNIX je ServerRoot zvyčajne v /usr/local/etc/httpd/ a DocumentRoot je zvyčajne v /usr/local/etc/httpd/htdocs/. Na vašom systéme však nezáleží, preto nahraďte všetky odkazy na ServerRoot a DocumentRoot vlastným ServerRoot a DocumentRoot.

Keď pristupujete k súborom pomocou webového prehliadača, zadáte súbor v URL relatívnej k DocumentRoot. Napríklad, ak je adresa vášho servera mymachine.org, potom k tomuto súboru pristupujete pomocou nasledujúcej adresy URL: http://mymachine.org/index.html

Konfigurácia servera pre CGI

Väčšina webových serverov je predkonfigurovaná tak, aby umožňovala používanie programov CGI. Zvyčajne dva parametre informujú server, či je súbor aplikáciou CGI alebo nie:

  • Určený adresár. Niektoré servery vám umožňujú určiť, že všetky súbory v určenom adresári (predvolene nazývanom cgi-bin) sú CGI.
  • Prípony názvov súborov. Mnohé servery sú vopred nakonfigurované tak, aby umožňovali definovanie všetkých súborov s príponou .cgi ako CGI.

Určená metóda adresára je do istej miery pozostatkom (úplne prvé servery ju používali ako jedinú metódu na určenie, ktoré súbory boli programy CGI), ale má niekoľko výhod.

  • Udržuje programy CGI centralizované, čím zabraňuje preplneniu iných adresárov.
  • Nie ste obmedzení na žiadnu konkrétnu príponu názvu súboru, takže súbory môžete pomenovať, ako chcete. Niektoré servery umožňujú označiť niekoľko rôznych adresárov ako adresáre CGI.
  • Poskytuje vám tiež väčšiu kontrolu nad tým, kto môže písať CGI. Napríklad, ak máte server a podporujete systém s viacerými používateľmi a nechcete, aby používali svoje vlastné skripty CGI bez toho, aby najprv zrevidovali program z bezpečnostných dôvodov, ako CGI môžete označiť iba tie súbory v obmedzenom centralizovanom adresári. . Používatelia vám potom budú musieť poskytnúť programy CGI na inštaláciu a najskôr môžete skontrolovať kód, aby ste sa uistili, že program nemá žiadne veľké bezpečnostné problémy.

Označenie CGI cez príponu názvu súboru môže byť užitočné kvôli jeho flexibilite. Pre programy CGI nie ste obmedzený na jeden jediný adresár. Väčšina serverov môže byť nakonfigurovaná tak, aby rozpoznala CGI prostredníctvom prípony názvu súboru, hoci nie všetky sú predvolene nakonfigurované týmto spôsobom.

POZOR

Pri konfigurácii servera pre CGI majte na pamäti bezpečnostné obavy. Niektoré tipy budú uvedené tu a kapitola 9, Zabezpečenie CGI, rozoberá tieto aspekty podrobnejšie.

Inštalácia CGI na servery UNIX

Bez ohľadu na to, ako je nakonfigurovaný váš server UNIX, existuje niekoľko krokov, ktoré musíte vykonať, aby ste sa uistili, že vaše aplikácie CGI bežia správne. Váš webový server bude normálne bežať ako neexistujúci používateľ (to znamená používateľ UNIX nikto – účet, ktorý nemá oprávnenia na súbory a nedá sa prihlásiť). CGI skripty (či už napísané v Perle, Bourne shell alebo inom skriptovacom jazyku) musia byť spustiteľné a čitateľné pre celý svet.

Nápoveda

Ak chcete, aby boli vaše súbory globálne čitateľné a spustiteľné, použite nasledujúci príkaz UNIX oprávnení: chmod 755 filename.

Ak používate skriptovací jazyk, ako je Perl alebo Tcl, uveďte úplnú cestu svojho tlmočníka na prvý riadok skriptu. Napríklad skript Perl používajúci perl v adresári /usr/local/bin by začínal nasledujúcim riadkom:

#!/usr/local/bin/perl

POZOR

Nikdy neumiestňujte tlmočník (perl alebo binárny súbor Tcl Wish do adresára /cgi-bin. To vytvára bezpečnostné riziko vo vašom systéme. Podrobnejšie je to uvedené v kapitole 9.

Niektoré univerzálne servery UNIX

Servery NCSA a Apache majú podobné konfiguračné súbory, pretože server Apache bol pôvodne založený na kóde NCSA. Štandardne sú nakonfigurované tak, že každý súbor v adresári cgi-bin (štandardne umiestnený v ServerRoot) je programom CGI. Ak chcete zmeniť umiestnenie adresára cgi-bin, môžete upraviť konfiguračný súbor conf/srm.conf. Formát na konfiguráciu tohto adresára je

ScriptAlias ​​​​falošný názov adresára skutočný názov adresára

kde fakedirectoryname je pseudonázov adresára (/cgi-bin) a realdirectoryname je úplná cesta, kde sú CGI programy skutočne uložené. Môžete nakonfigurovať viac ako jeden ScriptAlias ​​pridaním ďalších riadkov ScriptAlias.

Predvolená konfigurácia je dostatočná pre potreby väčšiny používateľov. Aj tak musíte upraviť riadok v súbore srm.conf, aby ste určili správny názov skutočného adresára. Ak sú napríklad vaše CGI programy umiestnené v /usr/local/etc/httpd/cgi-bin, riadok ScriptAlias ​​​​ vo vašom súbore srm.conf by mal vyzerať takto:

ScriptAlias ​​​​/cgi-bin/ /usr/local/etc/httpd/cgi-bin/

Ak chcete získať prístup k programom CGI umiestneným v tomto adresári alebo na ne vytvoriť prepojenie, použite nasledujúcu adresu URL:

http://hostname/cgi-bin/programname

Kde názov hostiteľa je názov hostiteľa vášho webového servera a názov programu je názov vášho CGI.

Povedzme napríklad, že ste skopírovali program hello.cgi do svojho adresára cgi-bin (napr. /usr/local/etc/httpd/cgi-bin) na webovom serveri s názvom www.company.com. Ak chcete získať prístup k svojmu CGI, použite nasledujúcu adresu URL: http://www.company.com/cgi-bin/hello.cgi

Ak chcete nakonfigurovať server NCSA alebo Apache tak, aby rozpoznal akýkoľvek súbor .cgi ako CGI, musíte upraviť dva konfiguračné súbory. Po prvé, v súbore srm.conf nekomentujte nasledujúci riadok:

AddType application/x-httpd-cgi .cgi

Toto priradí typ MIME CGI k prípone .cgi. Teraz musíme upraviť súbor access.conf, aby sme mohli spustiť CGI v ľubovoľnom adresári. Ak to chcete urobiť, pridajte možnosť ExecCGI do riadku Option. Bude to vyzerať asi ako nasledujúci riadok:

Indexy možností Nasledujte SymLinks ExecCGI

Teraz sa každý súbor s príponou .cgi považuje za CGI; pristupujte k nemu ako k akémukoľvek súboru na vašom serveri.

Server CERN je nakonfigurovaný rovnakým spôsobom ako servery Apache a NCSA. Namiesto ScriptAlias ​​používa server CERN príkaz Exec. Napríklad v súbore httpd.conf uvidíte nasledujúci riadok:

Exec /cgi-bin/* /usr/local/etc/httpd/cgi-bin/*

Ostatné UNIXové servery môžu byť nakonfigurované rovnakým spôsobom; viac podrobností je popísaných v dokumentácii k serveru.

Inštalácia CGI na Windows

Väčšina serverov dostupných pre Windows 3.1, Windows 95 a Windows NT je nakonfigurovaná s metódou "prípony názvu súboru" na rozpoznávanie CGI. Vo všeobecnosti zmena konfigurácie servera so systémom Windows jednoducho vyžaduje spustenie konfiguračného programu servera a vykonanie príslušných zmien.

Niekedy môže byť konfigurácia servera na správne spustenie skriptu (napríklad Perl) zložitá. V systéme DOS alebo Windows nebudete môcť zadať interpret v prvom riadku skriptu, ako by ste to urobili v systéme UNIX. Niektoré servery sú vopred nakonfigurované tak, aby priraďovali určité prípony súboru k interpreteru. Napríklad mnohé webové servery Windows predpokladajú, že súbory končiace na .pl sú skripty v jazyku Perl.

Ak server neimplementuje tento typ priradenia súborov, môžete definovať dávkový súbor balíčka, ktorý zavolá interpret aj skript. Rovnako ako pri serveri UNIX, neinštalujte interpret do adresára cgi-bin ani do žiadneho adresára prístupného z webu.

Inštalácia CGI na počítači Macintosh

Dve najznámejšie možnosti servera pre Macintosh sú WebStar StarNine a jeho predchodca MacHTTP. Obaja rozpoznávajú CGI podľa jeho prípony názvu súboru.

MacHTTP rozumie dvom rôznym príponám: .cgi a .acgi, čo znamená asynchrónne CGI. Bežné programy CGI nainštalované na počítači Macintosh (s príponou .cgi) udržia webový server zaneprázdnený, kým CGI nedokončí vykonávanie, čím server prinúti pozastaviť všetky ostatné požiadavky. Asynchrónne CGI na druhej strane umožňuje serveru akceptovať požiadavky, aj keď je spustený.

Vývojár CGI pre počítače Macintosh, ktorý používa ktorýkoľvek z týchto webových serverov, by mal vždy, keď je to možné, použiť príponu .acgi namiesto prípony .cgi. Mal by fungovať s väčšinou programov CGI; ak to nefunguje, premenujte program na .cgi.

CGI prevedenie

Po nainštalovaní CGI existuje niekoľko spôsobov, ako ho spustiť. Ak je váš CGI program len na výstup, ako napríklad Hello, World!, môžete ho spustiť jednoduchým prístupom k jeho URL.

Väčšina programov beží ako serverová aplikácia vo forme HTML. Predtým, ako sa naučíte získavať informácie z týchto formulárov, prečítajte si najprv krátky úvod o vytváraní takýchto formulárov.

Rýchly návod na HTML formuláre

Dve najdôležitejšie značky vo forme HTML sú značky a . Väčšinu formulárov HTML môžete vytvoriť iba pomocou týchto dvoch značiek. V tejto kapitole preskúmate tieto značky a malú podmnožinu možných typov alebo atribútov. . Kompletnú príručku a prepojenie na formuláre HTML nájdete v kapitole 3, HTML a formuláre.

Tag

Tag sa používa na určenie, ktorá časť súboru HTML by sa mala použiť na informácie zadané používateľom. Toto sa týka toho, ako väčšina stránok HTML vyvoláva program CGI. Atribúty tagov definujú názov a umiestnenie programu – buď lokálne alebo ako úplná adresa URL, typ použitého kódovania a metódu prenosu údajov, ktorú program používa.

Ďalší riadok zobrazuje špecifikácie pre značku :

< ACTION FORM = "url" METHOD = ENCTYPE = "..." >

Atribút ENCTYPE nemá žiadnu špeciálnu úlohu a zvyčajne nie je súčasťou značky . Podrobné informácie o značke ENCTYPE sú uvedené v kapitole 3. Jeden spôsob použitia ENCTYPE je uvedený v kapitole 14 „Rozšírenia značky“.

Atribút ACTION odkazuje na adresu URL programu CGI. Keď používateľ vyplní formulár a poskytne informácie, všetky informácie sa zakódujú a odovzdajú do programu CGI. Program CGI sám rozhoduje o otázke dekódovania a spracovania informácií; tento aspekt je uvedený v časti „Prijatie vstupu prehliadača“ ďalej v tejto kapitole.

Nakoniec atribút METHOD popisuje, ako by mal program CGI prijímať vstup. Tieto dve metódy, GET a POST, sa líšia v tom, ako sa informácie odovzdávajú programu CGI. O oboch sa hovorí v časti „Prijímanie vstupu z prehliadača“.

Aby prehliadač umožnil vstup používateľa, musia byť všetky značky formulára a informácie obklopené značkou . Nezabudnite na záverečný štítok

na označenie konca formulára. Vo formulári nemôžete mať formulár, hoci môžete nastaviť formulár, ktorý vám umožní prezentovať informácie na rôznych miestach; tento aspekt je podrobne diskutovaný v kapitole 3.

Tag

Pomocou značky môžete vytvárať textové vstupné pásy, prepínače, začiarkavacie políčka a ďalšie prostriedky na prijímanie vstupu . Táto časť pokrýva iba polia na zadávanie textu. Na implementáciu tohto poľa použite značku s nasledujúcimi atribútmi:

< INPUT TYPE=text NAME = "... " VALUE = "... " SIZE = MAXLENGTH = >

NAME je symbolický názov premennej, ktorá obsahuje hodnotu zadanú používateľom. Ak do atribútu VALUE zahrniete text, tento text sa umiestni ako predvolený do poľa na zadávanie textu. Atribút SIZE vám umožňuje určiť horizontálnu dĺžku vstupného poľa, ako sa zobrazí v okne prehliadača. Nakoniec MAXLENGTH definuje maximálny počet znakov, ktoré môže používateľ zadať do poľa. Všimnite si, že atribúty VALUE, SIZE, MAXLENGTH sú voliteľné.

Odoslanie formulára

Ak máte vo formulári iba jedno textové pole, používateľ môže odoslať formulár jednoduchým zadaním informácií na klávesnici a stlačením klávesu Enter. V opačnom prípade musí existovať iný spôsob, ako môže používateľ prezentovať informácie. Používateľ odošle informácie pomocou tlačidla Odoslať s nasledujúcou značkou:

< Input type=submit >

Táto značka vytvorí vo formulári tlačidlo Odoslať. Keď používateľ dokončí vyplnenie formulára, môže kliknutím na tlačidlo Odoslať jeho obsah odoslať na adresu URL určenú atribútom AKCIA formulára.

Prijímanie vstupu z prehliadača

Vyššie boli uvedené príklady písania programu CGI, ktorý odosiela informácie zo servera do prehliadača. V skutočnosti CGI program, ktorý vydáva iba dáta, nemá veľa aplikácií (niektoré príklady sú uvedené v kapitole 4). Dôležitejšou schopnosťou CGI je prijímať informácie z prehliadača, čo je funkcia, ktorá robí web interaktívnym.

Program CGI prijíma z prehliadača dva druhy informácií.

  • Najprv získa rôzne informácie o prehliadači (jeho typ, čo môže prehliadať, hostiteľský hostiteľ atď.), serveri (jeho názov a verzia, jeho vykonávací port atď.) a CGI programe. (názov programu a kde sa nachádza). Server poskytuje všetky tieto informácie programu CGI prostredníctvom premenných prostredia.
  • Po druhé, program CGI môže prijímať informácie zadané používateľom. Tieto informácie sa po zakódovaní prehliadačom odosielajú buď prostredníctvom premennej prostredia (metóda GET) alebo štandardným vstupom (metóda stdin POST).

Premenné prostredia

Je užitočné vedieť, aké premenné prostredia sú dostupné pre program CGI, a to ako na učenie, tak aj na ladenie. Tabuľka 2.2 uvádza niektoré dostupné premenné prostredia CGI. Môžete tiež napísať program CGI, ktorý odosiela premenné prostredia a ich hodnoty do webového prehliadača.

Tabuľka 2.2. Niektoré dôležité premenné prostredia CGI Premenná prostredia Účel REMOTE_ADDR Adresa IP klientskeho počítača. REMOTE_HOST Hostiteľ hostiteľského počítača klienta. HTTP _ACCEPT Uvádza typy údajov MIME, ktoré môže prehliadač interpretovať. HTTP _USER_AGENT Informácie o prehliadači (typ prehliadača, číslo verzie, operačný systém atď.). REQUEST_METHOD GET alebo POST. CONTENT_LENGTH Dĺžka vstupu, ak je odoslaný prostredníctvom POST. Ak nie je zadaný žiadny vstup alebo ak sa použije metóda GET, tento parameter nie je definovaný. QUERY_STRING Obsahuje vstupné informácie pri odoslaní pomocou metódy GET. PATH_INFO Umožňuje užívateľovi zadať cestu z príkazového riadka CGI (napríklad http://hostname/cgi-bin/programname/path). PATH_TRANSLATED Preloží relatívnu cestu v PATH_INFO na skutočnú cestu v systéme.

Ak chcete napísať aplikáciu CGI, ktorá zobrazuje premenné prostredia, musíte vedieť, ako urobiť dve veci:

  • Definujte všetky premenné prostredia a ich príslušné hodnoty.
  • Zobraziť výsledky pre prehliadač.

Už viete, ako vykonať poslednú operáciu. V Perle sú premenné prostredia uložené v asociatívnom poli %ENV, ktoré je uvedené názvom premennej prostredia. Výpis 2.3 obsahuje env.cgi, program v jazyku Perl, ktorý splní náš cieľ.

Výpis 2.3. Perl program, env.cgi, ktorý vypisuje všetky premenné prostredia CGI.

#!/usr/local/bin/perl print "Typ obsahu: text/html\n\n"; tlačiť" \n";tlač" Prostredie CGI\n";tlač"\n";tlač" \n";tlač"

Prostredie CGI

\n"; pre každý $env_var (klávesy %ENV) ( tlač " $env_var= $ENV($env_var)
\n"; ) vytlačiť " \n";

Podobný program by sa dal napísať v C; celý kód je vo výpise 2.4.

Výpis 2.4. env.cgi.c v C. /* env.cgi.c */ #include extern char **prostredie; int main() ( char **p = prostredie; printf("Typ obsahu: text/html\r\n\r\n"); printf(" \n"); printf(" Prostredie CGI\n"); printf("\n"); printf(" \n"); printf("

Prostredie CGI

\n"); while(*p != NULL) printf("%s
\n",*p++); printf(" \n"); )

GET alebo POST?

Aký je rozdiel medzi metódami GET a POST? GET odovzdá zakódovaný vstupný reťazec cez premennú prostredia QUERY_STRING, zatiaľ čo POST ho odovzdá cez stdin. POST je preferovaná metóda, najmä pre formuláre s veľkým množstvom údajov, pretože neexistujú žiadne obmedzenia na množstvo odosielaných informácií a pri metóde GET je množstvo mediálneho priestoru obmedzené. GET má však určitú užitočnú vlastnosť; toto je podrobne popísané v kapitole 5 Vstup.

Ak chcete zistiť, ktorá metóda sa používa, program CGI skontroluje premennú prostredia REQUEST_METHOD, ktorá bude nastavená na GET alebo POST. Ak je nastavená na POST, dĺžka zakódovaných informácií je uložená v premennej prostredia CONTENT_LENGTH.

Kódovaný vstup

Keď používateľ odošle formulár, prehliadač najprv zakóduje informácie pred ich odoslaním na server a potom do aplikácie CGI. Keď použijete značku , každé pole má priradený symbolický názov. Hodnota zadaná používateľom je reprezentovaná ako hodnota premennej.

Prehliadač na to používa špecifikáciu kódovania adresy URL, ktorá môže byť opísaná takto:

  • Rôzne polia oddeľuje znakom ampersand (&).
  • Oddeľuje názov a hodnoty znakmi rovnosti (=), pričom názov je vľavo a hodnota vpravo.
  • Medzery nahrádza znamienkami plus (+).
  • Nahradí všetky „nenormálne“ znaky znakom percenta (%), za ktorým nasleduje dvojmiestny hexadecimálny kód znaku.

Váš konečný zakódovaný reťazec bude vyzerať takto:

Meno1=hodnota1&meno2=hodnota2&meno3=hodnota3 ...

Poznámka: Špecifikácie pre kódovanie URL sú v RFC1738.

Povedzme napríklad, že ste mali formulár, ktorý požadoval meno a vek. HTML kód, ktorý bol použitý na zobrazenie tohto formulára, je uvedený vo výpise 2.5.

Výpis 2.5. HTML kód na zobrazenie formulára mena a veku.

meno a vek

Zadajte svoje meno:

Zadajte svoj vek:

Predpokladajme, že používateľ zadá do poľa meno Joe Schmoe a do poľa vek 20 rokov. Vstup bude zakódovaný vo vstupnom reťazci.

Meno=Joe+Schmoe&vek=20

Vstupná analýza

Aby boli tieto informácie užitočné, musíte použiť informácie o niečom, čo môžu použiť vaše programy CGI. Stratégie analýzy vstupu sú zahrnuté v kapitole 5. V praxi nikdy nemusíte premýšľať o tom, ako analyzovať vstup, pretože niekoľko ľudí už napísalo verejne dostupné knižnice, ktoré vykonávajú analýzu. Dve takéto knižnice sú uvedené v tejto kapitole v nasledujúcich častiach: cgi-lib.pl pre Perl (napísal Steve Brenner) a cgihtml pre C (napísal som ja).

Všeobecným cieľom väčšiny knižníc napísaných v rôznych jazykoch je analyzovať zakódovaný reťazec a vložiť páry mien a hodnôt do dátovej štruktúry. Používanie jazyka, ktorý má vstavané dátové štruktúry, ako je Perl, má zjavnú výhodu; väčšina knižníc pre jazyky nižšej úrovne, ako sú C a C++, však zahŕňa vykonávanie dátovej štruktúry a podprogramu.

Nie je potrebné dosiahnuť úplné pochopenie knižníc; oveľa dôležitejšie je naučiť sa ich používať ako nástroje na uľahčenie práce programátora CGI.

cgi-lib.pl

Cgi-lib.pl používa asociatívne polia Perlu. Funkcia &ReadParse analyzuje vstupný reťazec a zadá každý pár názov/hodnota podľa názvu. Napríklad zodpovedajúce perlové reťazce potrebné na dekódovanie práve prezentovaného vstupného reťazca „meno/vek“.

&ReadParse(*vstup);

Teraz, ak chcete vidieť hodnotu zadanú pre "name", môžete použiť asociatívne pole $input("name"). Podobne, ak chcete odkazovať na hodnotu „vek“, musíte sa pozrieť na premennú $input("vek").

cgihtml

C nemá žiadne vstavané dátové štruktúry, takže cgihtml implementuje svoj vlastný zoznam odkazov na použitie s rutinami analýzy CGI. Toto definuje štruktúru entrytype takto:

Typedef struct ( Char *meno; Char *hodnota; ) Entrytype;

Na analýzu vstupného reťazca "meno / vek" v jazyku C pomocou cgihtml sa používa toto:

/* deklaruje prepojený zoznam s názvom input */ Llist input; /* analyzovať vstup a umiestniť do prepojeného zoznamu */ read_cgi_input(&input);

Ak chcete získať prístup k informáciám o veku, môžete zoznam analyzovať manuálne alebo použiť poskytnutú funkciu cgi _val().

#include #include Char *vek = malloc (sizeof (char) * strlen (cgi _val (vstup, "vek")) + 1); Strcpy(vek, cgi_val(vstup, "vek"));

Hodnota "vek" je teraz uložená v reťazci veku.

Poznámka: Namiesto použitia jednoduchého poľa (napríklad char age ;), prideľujem pamäťový priestor dynamicky pre reťazec veku. To síce komplikuje programovanie, no napriek tomu je to dôležité z hľadiska bezpečnosti. Viac o tom v kapitole 9.

Jednoduchý CGI program

Chystáte sa napísať CGI program s názvom nameage.cgi, ktorý spracováva formulár „meno/vek“. Spracovanie údajov (čo zvyčajne nazývam „medzimateriál“) je minimálne. Nameage.cgi jednoducho dekóduje vstup a zobrazí meno používateľa a vek. Hoci to nie je pre takýto nástroj obzvlášť užitočné, demonštruje najkritickejší aspekt programovania CGI: vstup a výstup.

Používate rovnaký formulár, ako je popísané vyššie, pričom zavoláte polia „meno a vek“. Robustnosti a účinnosti sa zatiaľ nebojte; vyriešiť daný problém najjednoduchším spôsobom. Perl a C riešenia sú zobrazené vo výpisoch 2.6 a 2.7.

Výpis 2.6. Nameage.cgi v jazyku Perl

#!/usr/local/bin/perl # nameage.cgi vyžaduje "cgi-lib.pl" &ReadParse(*input); vytlačiť "Typ obsahu: text/html\r\n\r\n"; tlačiť" \n";tlač" meno a vek\n";tlač"\n";tlač" \n"; vytlačte "Dobrý deň, " . $input("meno") . ". Máte\n"; vytlačte $input("vek") . " rokov.

\n";tlač" \n";

Výpis 2.7. nameage.cgi v C

/* nameage.cgi.c */ #include #include "cgi-lib.h" int main() ( llist input; read_cgi_input(&input); printf("Typ obsahu: text/html\r\n\r\n"); printf(" \n"); printf(" meno a vek\n"); printf("\n"); printf(" \n"); printf("Dobrý deň, %s. Ste\n",cgi_val(vstup,"meno")); printf("máte %s rokov.

\n",cgi_val(input,"vek")); printf(" \n"); )

Všimnite si, že tieto dva programy sú takmer ekvivalentné. Obidve obsahujú rutiny analýzy, ktoré zaberajú iba jeden riadok a spracúvajú všetky vstupy (vďaka príslušným rutinám knižnice). Výstupom je v podstate upravená verzia vášho hlavného programu Hello, World!.

Skúste spustiť program vyplnením formulára a kliknutím na tlačidlo Odoslať.

Všeobecná programovacia stratégia

Teraz poznáte všetky základné princípy potrebné pre programovanie CGI. Keď pochopíte, ako CGI prijíma informácie a ako ich posiela späť do prehliadača, skutočná kvalita vášho konečného produktu závisí od vašich všeobecných programovacích schopností. Menovite, keď programujete CGI (alebo čokoľvek iné), majte na pamäti nasledujúce vlastnosti:

  • Jednoduchosť
  • Efektívnosť
  • Všestrannosť

Prvé dve vlastnosti sú celkom bežné: snažte sa, aby bol váš kód čo najčitateľnejší a najefektívnejší. Všestrannosť sa týka viac programov CGI ako iných aplikácií. Keď začnete vyvíjať svoje vlastné CGI programy, zistíte, že existuje niekoľko základných aplikácií, ktoré chce robiť každý. Napríklad jednou z najbežnejších a najzrejmejších úloh programu CGI je spracovanie formulára a odoslanie výsledkov e-mailom konkrétnemu príjemcovi. Môžete mať niekoľko samostatných vykreslených formulárov, z ktorých každý má iného príjemcu. Namiesto písania programu CGI pre každý jednotlivý formulár môžete ušetriť čas napísaním všeobecnejšieho programu CGI, ktorý vyhovuje všetkým formulárom.

Pokrytím všetkých základných aspektov CGI som vám poskytol dostatok informácií, aby ste mohli začať s programovaním CGI. Ak však chcete byť efektívnym vývojárom CGI, musíte mať hlbšie pochopenie toho, ako CGI komunikuje so serverom a prehliadačom. Zvyšok tejto knihy podrobne rozoberá tie problémy, ktoré boli stručne spomenuté v tejto kapitole, ako aj stratégie vývoja aplikácií, výhody a obmedzenia protokolu.

Zhrnutie

Táto kapitola stručne popisuje základy programovania CGI. Výstup vytvoríte správnym formátovaním údajov a tlačou na štandardný výstup. Získanie vstupu CGI je o niečo komplikovanejšie, pretože ho treba pred použitím analyzovať. Našťastie už existuje niekoľko knižníc, ktoré analýzu vykonávajú.

Teraz by ste už mali byť celkom spokojní s programovaním CGI aplikácií. Zvyšok tejto knihy je venovaný podrobnejšej prezentácii špecifikácií, rád a programovacích stratégií pre pokročilejšie a komplexnejšie aplikácie.

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 objaví zmienka o akýchsi cgi-skriptoch. 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 webovej stránky). Tento program sa v podstate 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, niečo ako toto:

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 ....
Ale čo 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 skripty: 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

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 ...), to sa dá opraviť priamo na ceste.
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 zvyčajne 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.

Majitelia internetových obchodov poznajú pojem „elektronický obchod“ na vlastnej koži, určite poznajú odpoveď na otázku „elektronický obchod – čo to je“. Ale ak pochopíte podstatu, potom sa objavia mnohé nuansy a tento pojem nadobudne širší význam.

Elektronický obchod: čo to je?

Všeobecná koncepcia je nasledovná: elektronický obchod sa chápe ako určitý prístup k podnikaniu, ktorý zahŕňa zahrnutie množstva prevádzok, ktoré využívajú digitálny prenos dát pri poskytovaní tovaru alebo poskytovaní služieb/práce, a to aj prostredníctvom internet.

Ide teda o akúkoľvek obchodnú transakciu, ktorá sa uskutočňuje pomocou elektronických komunikačných prostriedkov.

Schéma práce je usporiadaná takto:

  • do tohto systému sa zaregistruje každý môže byť blogerom alebo iným vlastníkom vlastnej internetovej stránky;
  • dostane svoj vlastný odkaz;
  • umiestni na svoju webovú stránku špeciálny kód - zobrazí sa reklama vybraného oficiálneho partnera siete e-Commerce Partners Network;
  • monitoruje konverziu webových stránok;
  • zarobí určité percento za každý nákup návštevníka jeho stránky, ktorý klikol na pridružený odkaz.

Elektronický obchod WP

Veľký počet ľudí je v súčasnosti nadšený pre elektronický obchod, predovšetkým kvôli túžbe vytvoriť si vlastnú webovú stránku, jedinečný internetový obchod na predaj vlastných produktov. Na uspokojenie tohto rastúceho dopytu sa vývojári zamerali na vytváranie šablón elektronického obchodu (šablóny elektronického obchodu). Čo to je, zvážime ďalej.

Jedným z takýchto príkladov šablón je elektronický obchod WordPress. Ide o doplnok nákupného košíka pre WordPress (jeden z najznámejších systémov na správu webových zdrojov, určený predovšetkým na vytváranie a organizovanie blogov). Poskytuje sa úplne bezplatne a umožňuje návštevníkom stránky nakupovať na internetovej stránke.

Inými slovami, tento doplnok vám umožňuje vytvoriť internetový obchod (založený na WordPress). Tento doplnok elektronického obchodu má všetky potrebné nástroje, nastavenia a možnosti, aby vyhovoval dnešným potrebám.