Fiktivní c deska cgi. Obecná programovací strategie. Instalace CGI na servery UNIX


Citát:
Experimentujte a zjistíte, kde je to lepší. Pokud je tam mixpult, tak pravděpodobně v line-in.

Citát:
Těžko říct... Možná byla úroveň signálu z kytary/přístroje příliš vysoká...
Nebo z přerušeného drátu. Ale sotva.
Nebo jiná možnost: kliky vznikly tím, že si počítač v reálném čase neporadil. I když ve vaší konfiguraci je to také nepravděpodobné.

Citát:
V nastavení nahrávání zvuku je třeba vybrat "nahrávací zařízení = linka".

Citát:
Proti hluku je lepší chránit na nižší úrovni – tzn. i PŘED zvukem.

Citát:
Záleží na stylu. Pro hustotu můžete, ale za žádných okolností kopírovat to, co již bylo zaznamenáno. Musíme to nahrát znovu, teprve potom bude hlasitost.

Citát:
Kdo to umí lépe, ať píše! Na výsledku musíme pracovat, ale společně se rozsekáme!

Citát:
Opakuji, používáme FL Studio 5. Jeden problém - dobré vzorky jsou dostupné pouze na internetu.

Citát:
To je pravděpodobně o Cakewalk? V opcích by mělo být 100 liber.

Citát:

2- jak odstranit pozadí z kytarového zkreslení?

Moje zkušenost (jen se nesmějte!) Použili jsme zařízení Ural s podomácku vyrobenou elektronikou + krém Metalizer. Vše bylo samozřejmě nahlas (mimochodem při nahrávání se držte dál od CRT monitoru!). Udělali jsme toto: vyčistili jsme radiátor topení a s první kytarovou strunou jsme uzemnili stínění kytarového kabelu (od lotionu) k baterii. Hladina hluku se snížila 3krát.
To je samozřejmě docela nebezpečné, protože... to všechno jiskřilo špatný kontakt, a teoreticky bylo možné všechno spálit do pekla.

Citát:
Náš basák to udělal. Ideální varianta je samozřejmě přes kombi + mikrofon... Ale pokud použijete dist zabudovaný v kombi, tak proč ne?

Citát:
1) Pořiďte si mechanický metronom
2) Vytvořte bicí stopu s hi-hats a hrajte ji v režimu „loop“ při nahrávání (nahrávání by mělo být mikrofonní nebo linkové, ale ne stereo mix)
2a) Spusťte program metronomu
3) Povolte funkci metronomu téměř v jakémkoli audio programu.

Mimochodem, některé otázky zde již byly diskutovány:




-----
http://excoriare.fatal.ru
Vstoupím do Misantropské společnosti
Jakými nevratnými změnami v psychice musí člověk projít, aby tohle mohl poslouchat???? c) San Darus

Common Gateway Interface (CGI, Russian Common Gateway Interface) je standardní metoda dynamické ovládání obsahu webových stránek pomocí speciální programy spouštění na straně webového serveru. Tyto programy se nazývají CGI handlery nebo brány, ale častěji - CGI skripty, protože... jsou obvykle zapsány skriptovací jazyky, většinou v Perlu.

Vzhledem k tomu, že hypertext je ve své podstatě statický, webová stránka nemůže přímo interagovat s uživatelem. Před příchodem JavaScriptu neexistoval žádný jiný způsob, jak reagovat na akce uživatelů, než předávání zadaných dat webovému serveru k dalšímu zpracování. V případě CGI se toto zpracování provádí pomocí externí programy a skripty, ke kterým se přistupuje prostřednictvím standardizovaného (viz RFC 3875: CGI verze 1.1) rozhraní – společné brány. Zjednodušený model ilustrující fungování CGI je znázorněn na Obr. 1.

Jak CGI funguje?

Zobecněný algoritmus pro práci přes CGI může být prezentován následovně:

  1. Klient požaduje aplikaci CGI pomocí svého URI.
  2. Webový server přijme požadavek a nastaví proměnné prostředí , jehož prostřednictvím se do aplikace přenášejí data a informace o službách.
  3. Webový server přesměrovává požadavky přes standardní proud vstup (stdin) na vstup volaného programu.
  4. Aplikace CGI provádí všechny potřebné operace a generuje výsledky jako HTML.
  5. Vygenerovaný hypertext je vrácen na webový server prostřednictvím standardního výstupního proudu (stdout). Chybové zprávy jsou odesílány přes stderr.
  6. Webový server předá výsledky požadavku klientovi.

Aplikace CGI

Nejčastějším úkolem, pro který se CGI používá, je tvorba interaktivních stránek, jejichž obsah závisí na akcích uživatele. Typickými příklady takových webových stránek jsou registrační formulář webové stránky nebo formulář pro komentáře. Další oblast použití CGI, která zůstává v zákulisí uživatelské interakce, je spojena se sběrem a zpracováním informací o klientovi: nastavení a čtení „cookies“; získávání údajů o prohlížeči a operačním systému; počítání návštěv na webové stránce; sledování návštěvnosti webu atd.

Tyto schopnosti poskytuje skutečnost, že skript CGI lze připojit k databázi nebo přistupovat souborový systém server. Skript CGI tak může ukládat informace do databázových tabulek nebo souborů a na požádání je odtud načíst, což nelze provést pomocí HTML.

UPOZORNĚNÍ: CGI není programovací jazyk! Je to jednoduchý protokol, který umožňuje webovému serveru předávat data přes stdin a číst je ze stdout. Proto jakékoli serverový program, schopný pracovat se standardními I/O streamy.

Ahoj světe!

Příklad jednoduchého CGI skriptu na jazyk perl je zobrazen ve výpisu 1. Pokud tento kód uložíte do souboru s názvem hello (název může být jakýkoli, přípona může být stejná), umístěte soubor do adresáře serveru cgi-bin (přesněji do adresáře webového serveru který je určen pro CGI aplikace a specifikován v nastavení webového serveru) a nastavte pro tento soubor spouštěcí práva (chmod uo+x hello), pak bude dostupný na adrese jako http://název serveru/cgi-bin/hello.

Výpis 1. Příklad skriptu CGI (Perl)

#!/usr/bin/perl print "Typ obsahu: text/html\n\n"; tisk< CGI říká Ahoj

Ahoj světe!



HTML exit;

V tomto kódu řádek #!/usr/bin/perl specifikuje úplnou cestu k interpretu Perl. Řádek Content-type: text/html\n\n je záhlaví http, které určuje typ obsahu (mime-type). Je vyžadován znak dvojitého konce řádku (\n\n), který odděluje záhlaví od těla zprávy.

Proměnné prostředí

Všechny CGI aplikace mají přístup k proměnným prostředí nastaveným webovým serverem. Tyto proměnné hrají důležitou roli při psaní CGI programů. Tabulka uvádí některé proměnné dostupné pro CGI.

Proměnná prostředíPopis
TYP OBSAHU Typ dat odeslaných na server. Používá se, když klient odesílá data, jako je stahování souboru.
CONTENT_LENGTHŽádost o velikost obsahu. Tato proměnná je definována pro požadavky POST.
HTTP_COOKIEVrátí sadu souborů cookie jako páry klíč–hodnota.
HTTP_USER_AGENTInformace o uživatelském agentovi (prohlížeči).
PATH_INFOCesta k adresáři CGI
ŘETĚZEC DOTAZUŘetězec dotazu (zakódovaný v URL) předaný metodou GET.
REMOTE_ADDRIP adresa klienta, který požaduje.
REMOTE_HOSTCelé jméno (FQDN) klienta. (Pokud je k dispozici)
REQUEST_METHODZpůsob, kterým je požadavek proveden. Nejčastěji GET nebo POST.
SCRIPT_FILENAMEÚplná cesta k požadovanému skriptu (v systému souborů serveru).
SCRIPT_NAMENázev skriptu
SERVER_NAMENázev serveru
SERVER_ADDRIP adresa serveru
SERVER_SOFTWAREInformace o serverovém softwaru

Výpis 2 ukazuje kód pro malý program v Perlu, který tiskne seznam proměnných prostředí. Výsledek jeho práce je na Obr. 2.

Výpis 2. Proměnné prostředí

#!/usr/bin/perl print "Typ obsahu: text/html\n\n"; tisk " \n \n

životní prostředí

\n"; foreach (klíče řazení %ENV) ( tisk " $_: $ENV($_)
\n"; ) tisknout "

\n"; výstup;

Přenos dat: metoda GET

Metoda GET se používá k předávání dat kódovaných urlen pomocí řetězce dotazu. Adresa požadovaného zdroje (CGI skript) a data do něj přenesená jsou odděleny znakem „?“. Příklad takové adresy:

http://example.com/cgi-bin/script.cgi?key1=value1&key2=value2

Pro data zadávaná do adresního řádku prohlížeče se standardně používá metoda GET. Stejný řetězec lze vygenerovat při odesílání dat z webového formuláře (tag

), pokud není uveden způsob odeslání formuláře. Všechny informace zasílané metodou GET jsou odesílány jako prostý text, takže byste je nikdy neměli používat k odesílání hesel nebo jiných podobných informací na server. Metoda GET má omezení velikosti: řetězec dotazu nesmí být delší než 1024 znaků.

Informace zasílané metodou GET jsou přenášeny v hlavičce QUERY_STRING jako řetězec složený z dvojic formuláře klíč=hodnota, skript CGI jej může získat prostřednictvím stejnojmenné proměnné prostředí.

Výpis 3. Odeslání dat z webového formuláře metodou GET

Jednoduché CGI skriptování: Odesílání dat pomocí metody GET Tvoje jméno: name="user">
Kde jsi ty z?: name="from">



Po zadání údajů do formuláře z výpisu 3 a kliknutí na tlačítko "Odeslat" se vygeneruje řetězec dotazu, jako je tento:

http://example.com/cgi-bin/ Řekni Ahoj?uživatel=nějaký text&z=jiný text

kde: sayhello - název skriptu CGI; user a from jsou názvy parametrů; sometext a othertext jsou uživatelem zadané hodnoty odpovídajících parametrů.

Výpis 4 je příklad skriptu, který dokáže zpracovat data formuláře z Výpisu 3.

Výpis 4. Odeslání dat z webového formuláře metodou GET

#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # Analyzujte prostředí $ENV("POŽADAVKA_METHOD") =~ tr/a-z/A-Z/; if ($ENV(" REQUEST_METHOD")ekv" DOSTAT") ( $buffer = $ENV(" ŘETĚZEC DOTAZU"); ) # Rozdělte řetězec dotazu na páry klíč/hodnota @pairs = split(/&/, $buffer); foreach $pair (@pairs) (($name, $value) = split(/=/, $ pair); $hodnota =~ tr/+/ /; $hodnota =~ s/%(..)/pack("C", hex($1))/např. Uložíme data do pole) tisk záhlaví "Typ obsahu: text/html\n\n" # Odeslat hypertextový tisk;< CGI říká Ahoj

Dobrý den, $FORM(user) z $FORM(from)!



HTML exit;

Přenos dat: metoda POST

Obecně je pro předávání informací do CGI skriptu vhodnější metoda POST. Blok přenášených dat je tvořen stejným způsobem jako u metody GET, vlastní přenos je však realizován v těle požadavku. Data jsou vkládána do CGI aplikace přes standardní vstup(stdin).

Chcete-li odeslat data pomocí této metody, musí být výslovně uvedena v popisu formuláře (action="POST").

Pro zpracování vstupu musí skript CGI číst stdin, a aby to udělal správně, potřebuje znát velikost zprávy z proměnné CONTENT_LENGTH. Abychom to ilustrovali, upravme blok analýzy prostředí ve výpisu 4 tak, že jej nahradíme následujícím kódem:

... # Analyzujte prostředí $ENV("ŽÁDOST_METHOD") =~ tr/a-z/A-Z/; if ($ENV(" REQUEST_METHOD")ekv" POŠTA")( číst( STDIN, $buffer, $ENV(" CONTENT_LENGTH"}); } ...

Další zpracování parametrů a jejich hodnot uložených v proměnné $buffer se provádí stejným způsobem jako při použití metody GET.

Výhody CGI

Mnoho funkcí CGI je nyní duplikováno technologiemi, jako jsou DHTML, ActiveX nebo Java applety. Hlavní výhody použití serverových skriptů jsou, že si můžete být jisti, že všichni klienti (až na vzácné výjimky, obvykle spojené s blokováním přístupu k určitým zdrojům na úrovni firewallu) budou moci pracovat se serverovou aplikací. Klientské programy mohou být jednoduše zakázány v prohlížeči nebo nejsou podporovány vůbec.

Nevýhody CGI

Největší nevýhodou této technologie jsou zvýšené nároky na výkon webového serveru. Faktem je, že každé volání aplikace CGI způsobí vytvoření nového procesu se všemi souvisejícími režiemi. Pokud je aplikace napsána s chybami, pak je možná situace, kdy se například dostane do smyčky. Prohlížeč ukončí připojení po vypršení časového limitu, ale na straně serveru bude proces pokračovat, dokud správce nevynutí jeho ukončení. V tomto ohledu mají klientské skripty značnou výhodu, protože jsou prováděny lokálně.

Další nevýhodou CGI je, že webový server je méně bezpečný než jiná řešení. Nesprávné nastavení přístupových práv k serverovým zdrojům z CGI aplikace může ohrozit nejen výkon webového serveru, ale také bezpečnost informací. Jakákoli síťová technologie však může být z definice považována za potenciálně nebezpečnou.

Trvalá adresa této stránky:

Díky World Wide Web může téměř kdokoli poskytovat informace online ve formě, která je nenáročná na oči a může být široce šířena. Nepochybně jste surfovali po internetu a viděli další stránky a nyní pravděpodobně víte, že děsivé zkratky jako „HTTP“ a „HTML“ jsou jednoduše zkratkou pro „web“ a „způsob, jakým jsou informace vyjadřovány na internetu“. Možná už máte nějaké zkušenosti s prezentací informací na internetu.

Internet se ukázal jako ideální médium pro šíření informací, jak je patrné z jeho obrovské popularity a širokého rozvoje. Ačkoli někteří zpochybňují užitečnost internetu a připisují jeho rozšířený rozvoj a popularitu především vtíravé reklamě, internet je nepopiratelně důležitým médiem pro prezentaci všech druhů informací. Nejen, že je k dispozici mnoho služeb pro poskytování aktuálních informací (zprávy, počasí, živé sportovní události) a referenčních materiálů elektronicky, je k dispozici také značné množství dalších typů dat. IRS, která distribuovala všechny své formuláře daňových přiznání za rok 1995 a další informace prostřednictvím World Wide Web, nedávno přiznala, že na své webové stránky dostávala e-maily od fanoušků. Kdo by si pomyslel, že IRS někdy dostane poštu od fanoušků? Nebylo to proto, že by jeho stránka byla dobře navržena, ale proto, že se ukázala být skutečně užitečným nástrojem pro tisíce, možná miliony lidí.

Čím je web jedinečný a tak atraktivní informační služba? V první řadě poskytuje hypermediální rozhraní k datům. Myslete na pevný disk vašeho počítače. Data jsou obvykle vyjádřena lineárně, podobně jako souborový systém. Například máte několik složek a uvnitř každé složky jsou buď dokumenty, nebo jiné složky. Web používá k vyjádření informací jiné paradigma, které se nazývá hypermédia. Hypertextové rozhraní se skládá z dokumentu a odkazů. Odkazy jsou slova, na která se klikne, chcete-li zobrazit další dokumenty nebo najít jiné typy informací. Web rozšiřuje koncept hypertextu o další typy médií, jako je grafika, zvuky, video (odtud název „hypermédia“). Výběr textu nebo grafiky v dokumentu umožňuje zobrazit související informace o vybrané položce v libovolném počtu forem.

Z tohoto jednoduchého a jedinečného způsobu prezentace a distribuce informací může těžit téměř každý, od akademiků, kteří chtějí data okamžitě používat se svými kolegy, až po obchodníky, kteří sdílejí informace o své společnosti se všemi. I když je poskytování informací nesmírně důležité, v posledních několika letech se mnozí domnívají, že přijímání informací je stejně důležitý proces.

Přestože web poskytuje jedinečné hypermediální rozhraní pro informace, existuje mnoho dalších účinných způsobů distribuce dat. Například síťové služby jako File Transfer Protocol (FTP) a diskusní skupina Gopher existovaly dlouho před World Wide Web. Elektronická pošta je primárním médiem pro komunikaci a výměnu informací na internetu a ve většině ostatních sítí téměř od samého počátku těchto sítí. Proč se internet stal tak populárním způsobem distribuce informací? Multimediální aspekt internetu významně přispěl k jeho nebývalému úspěchu, ale aby byl internet nejúčinnější, musí být interaktivní.

Bez možnosti přijímat uživatelské vstupy a poskytovat informace by byl web zcela statickým prostředím. Informace budou dostupné pouze ve formátu určeném autorem. To by podkopalo jednu ze schopností výpočetní techniky obecně: interaktivní informace. Například než nutit uživatele prohlížet si více dokumentů, jako by si prohlížel knihu nebo slovník, by bylo lepší umožnit uživateli identifikovat klíčová slova na téma, které ho zajímá. Uživatelé si mohou upravit prezentaci dat spíše než se spoléhat na pevnou strukturu definovanou poskytovatelem obsahu.

Termín „webový server“ může být zavádějící, protože se může vztahovat jak na fyzický stroj, tak na software, který používá ke komunikaci s internetovými prohlížeči. Když si prohlížeč vyžádá danou webovou adresu, nejprve se připojí k zařízení přes internet a odešle softwaru webového serveru požadavek na dokument. Tento software běží nepřetržitě, čeká na doručení takových požadavků a odpovídajícím způsobem reaguje.

Přestože servery mohou odesílat a přijímat data, samotný server má omezenou funkčnost. Například nejprimitivnější server může odeslat pouze požadovaný soubor do prohlížeče. Server obvykle neví, co dělat s tím či oním dalším vstupem. Pokud ISP neřekne serveru, jak zpracovat tyto dodatečné informace, server bude s největší pravděpodobností vstup ignorovat.

Aby server mohl kromě vyhledávání a odesílání souborů do internetového prohlížeče provádět další operace, musíte vědět, jak rozšířit funkčnost serveru. Webový server například nemůže prohledávat databázi na základě klíčového slova zadaného uživatelem a vracet více odpovídajících dokumentů, pokud taková schopnost nebyla na serveru nějakým způsobem naprogramována.

Co je CGI?

Common Gateway Interface (CGI) je rozhraní k serveru, které umožňuje rozšířit funkčnost serveru. Pomocí CGI můžete interaktivně komunikovat s uživateli, kteří přistupují na váš web. Na teoretické úrovni CGI umožňuje serveru, aby byl schopen analyzovat (interpretovat) vstup z prohlížeče a vracet informace na základě vstupu uživatele. Na praktické úrovni je CGI rozhraní, které umožňuje programátorovi psát programy, které snadno komunikují se serverem.

Chcete-li rozšířit možnosti serveru, obvykle byste museli server upravit sami. Toto řešení je nežádoucí, protože vyžaduje pochopení nižší vrstvy síťového programování internetového protokolu. To by také vyžadovalo úpravu a rekompilaci zdrojového kódu serveru nebo psaní vlastního serveru pro každou úlohu. Řekněme, že chceme rozšířit možnosti serveru tak, aby fungoval jako brána Web-to-e-mail, která přebírá informace zadané uživatelem z prohlížeče a odesílá je e-mailem jinému uživateli. Server by musel vložit kód k analýze vstupu z prohlížeče, předat jej e-mailem jinému uživateli a předat odpověď zpět do prohlížeče přes síťové připojení.

Za prvé, taková úloha vyžaduje přístup ke kódu serveru, což není vždy možné.

Za druhé, je to obtížné a vyžaduje rozsáhlé technické znalosti.

Za třetí, toto platí pouze pro konkrétní server. Pokud potřebujete přesunout server na jinou platformu, budete muset spustit nebo alespoň strávit spoustu času portováním kódu na tuto platformu.

Proč CGI?

CGI nabízí přenosné a jednoduché řešení těchto problémů. Protokol CGI definuje standardní způsob komunikace programů s webovým serverem. Bez jakýchkoliv speciálních znalostí můžete napsat program v jakémkoli strojovém jazyce, který je rozhraním a komunikuje s webovým serverem. Tento program bude fungovat se všemi webovými servery, které rozumí protokolu CGI.

Komunikace CGI se provádí pomocí standardního vstupu a výstupu, což znamená, že pokud umíte tisknout a číst data pomocí svého programovacího jazyka, můžete napsat aplikaci pro webový server. Kromě analýzy vstupu a výstupu je programování CGI aplikací téměř ekvivalentní programování jakékoli jiné aplikace. Například k naprogramování programu "Hello, World!", použijete tiskové funkce vašeho jazyka a formát definovaný pro CGI programy pro tisk odpovídající zprávy.

Výběr programovacího jazyka

Protože CGI je univerzální rozhraní, nejste omezeni na žádný konkrétní strojový jazyk. Důležitá otázka, která je často kladena, je: na jaké programovací jazyky lze použít CGI programování? Můžete použít jakýkoli jazyk, který vám umožní provádět následující:

  • Tisk na standardní výstup
  • Čtení ze standardního vstupu
  • Čtení z proměnných režimů

Téměř všechny programovací jazyky a mnoho skriptovacích jazyků dělá tyto tři věci a můžete použít kteroukoli z nich.

Jazyky spadají do jedné z následujících dvou tříd: přeložené a tlumočené. Přeložený jazyk, jako je C nebo C++, je obvykle menší a rychlejší, zatímco interpretované jazyky jako Perl nebo Rexx někdy vyžadují, aby byl při spuštění nahrán velký interpret. Navíc můžete distribuovat binární kódy (kód, který se překládá do strojového jazyka) bez zdrojového kódu, pokud je váš jazyk přeložitelný. Distribuce interpretovatelných skriptů obvykle znamená distribuci zdrojového kódu.

Před výběrem jazyka musíte nejprve zvážit své priority. Musíte zvážit výhody rychlosti a efektivity jednoho programovacího jazyka oproti snadnosti programování jiného. Pokud se chcete naučit další jazyk, místo toho, abyste používali ten, který již znáte, pečlivě zvažte výhody a nevýhody obou jazyků.

Dva nejběžněji používané jazyky pro programování CGI jsou C a Perl (oba tyto jazyky jsou popsány v této knize). Oba mají jasné výhody a nevýhody. Perl je jazyk na velmi vysoké úrovni a zároveň výkonný jazyk, vhodný zejména pro rozebrat text. Ačkoli jeho snadné použití, flexibilita a výkon z něj činí atraktivní jazyk pro programování CGI, jeho relativně velká velikost a pomalejší provoz jej někdy činí nevhodným pro některé aplikace. Programy v jazyce C jsou menší, efektivnější a poskytují řízení systému na nižší úrovni, ale jsou složitější na programování, nemají lehké vestavěné rutiny pro zpracování textu a obtížněji se ladí.

Jaký jazyk je nejvhodnější pro programování CGI? Ten, který považujete za pohodlnější z programovacího hlediska. Oba jsou stejně efektivní pro programování CGI aplikací a se správnými knihovnami mají oba podobné schopnosti. Pokud však máte těžko dostupný server, můžete použít menší přeložené programy v jazyce C. Pokud potřebujete rychle napsat aplikaci, která vyžaduje hodně práce se zpracováním textu, můžete místo toho použít Perl.

Upozornění

Existuje několik důležitých alternativ k aplikacím CGI. Mnoho serverů nyní obsahuje programování API, což usnadňuje programování přímých serverových rozšíření na rozdíl od samostatných aplikací CGI. Servery API jsou obecně efektivnější než programy CGI. Jiné servery obsahují vestavěnou funkcionalitu, která dokáže zpracovat speciální prvky bez CGI, jako je například propojování databází. A konečně, některé aplikace mohou být řízeny některými novými technologiemi na straně klienta (spíše než na straně serveru), jako je Java. S tak rychlými změnami v technologii se CGI rychle stane zastaralým?

Stěží. CGI má oproti novějším technologiím několik výhod.

  • Je všestranný a přenosný. Aplikaci CGI můžete napsat pomocí téměř jakéhokoli programovacího jazyka na jakékoli platformě. Některé z alternativ, jako je serverové API, vás omezují na určité jazyky a je mnohem obtížnější se je naučit.
  • Je nepravděpodobné, že technologie na straně klienta, jako je Java, nahradí CGI, protože existují některé aplikace, pro které jsou aplikace na straně serveru mnohem vhodnější.
  • Mnohá ​​z omezení CGI jsou omezení HTML nebo HTTP. Jak se vyvíjejí internetové standardy jako celek, vyvíjejí se i možnosti CGI.

souhrn

Common Gateway Interface je protokol, pomocí kterého programy komunikují s webovými servery. Všestrannost CGI dává programátorům možnost psát programy brány v téměř jakémkoli jazyce, i když existuje mnoho kompromisů spojených s různými jazyky. Bez této schopnosti by bylo vytváření interaktivních webových stránek obtížné, v nejlepším případě by vyžadovalo úpravy serveru a interaktivita by byla nedostupná pro většinu uživatelů, kteří nejsou správci webu.

Kapitola 2: Základy

Před několika lety jsem vytvořil stránku pro vysokou školu na Harvardu, kde o nich lidé mohli posílat komentáře. V té době byl internet mladý a dokumentace byla vzácná. Stejně jako mnoho dalších jsem se při výuce CGI programování spoléhal na krátkou dokumentaci a programovací systémy vytvořené jinými. Přestože tento způsob studia vyžadoval určité hledání, mnoho experimentů a vytvořil mnoho otázek, byl velmi účinný. Tato kapitola je výsledkem mé rané práce s CGI (samozřejmě s několika úpravami).

Přestože úplné pochopení a zvládnutí běžného rozhraní brány nějakou dobu trvá, samotný protokol je poměrně jednoduchý. Každý, kdo má nějaké základní programátorské dovednosti a zná web, se může rychle naučit programovat poměrně složité CGI aplikace, stejně jako jsem se to naučil já a další před několika lety.

Účelem této kapitoly je představit základy CGI komplexním, i když zhuštěným způsobem. Každý zde probíraný koncept je podrobně popsán v následujících kapitolách. Po dokončení této kapitoly však můžete okamžitě začít programovat aplikace CGI. Jakmile dosáhnete této úrovně, můžete se naučit složitosti CGI, buď přečtením zbytku této knihy, nebo jednoduše experimentováním na vlastní pěst.

Programování CGI můžete zredukovat na dva úkoly: přijímání informací z webového prohlížeče a odesílání informací zpět do prohlížeče. To se provádí zcela intuitivně, jakmile se seznámíte s normálním používáním CGI aplikací. Často je uživatel požádán, aby vyplnil nějaký formulář, například vložil své jméno. Jakmile uživatel vyplní formulář a stiskne Enter, jsou tyto informace odeslány do programu CGI. Program CGI pak musí tyto informace převést na něco, čemu rozumí, odpovídajícím způsobem je zpracovat a poté je odeslat zpět do prohlížeče, ať už jde o jednoduché potvrzení nebo výsledek hledání ve víceúčelové databázi.

Jinými slovy, programování CGI vyžaduje pochopení toho, jak přijímat vstup z internetového prohlížeče a jak odesílat výstup zpět. Co se stane mezi vstupní a výstupní fází CGI programu, závisí na cíli vývojáře. Zjistíte, že hlavní problém programování CGI spočívá v tomto mezistupni; Jakmile se naučíte pracovat se vstupem a výstupem, v podstatě to stačí k tomu, abyste se stali vývojářem CGI.

V této kapitole se naučíte principy vstupu a výstupu CGI a také další základní dovednosti, které budete potřebovat k psaní a používání CGI, včetně věcí, jako je vytváření formulářů HTML a pojmenování programů CGI. Tato kapitola pokrývá následující témata:

  • Tradiční program „Ahoj, světe!“;
  • Výstup CGI: Odesílání informací zpět pro zobrazení v internetovém prohlížeči;
  • Konfigurace, instalace a spuštění aplikace. Dozvíte se o různých webových platformách a serverech;
  • CGI Input: Interpretace informací odeslaných webovým prohlížečem. Úvod do některých užitečných programovacích knihoven pro analýzu takového vstupu;
  • Jednoduchý příklad: pokrývá všechny lekce v dané kapitole;
  • Strategie programování.

Vzhledem k povaze této kapitoly se některých témat dotýkám jen lehce. Nebojte se; Všechna tato témata jsou mnohem hlouběji popsána v jiných kapitolách.

Ahoj světe!

Začnete tradičním úvodním programovacím problémem. Napíšete program, který zobrazí "Hello, World!" ve vašem webovém prohlížeči. Než napíšete tento program, musíte pochopit, jaké informace webový prohlížeč očekává od programů CGI. Musíte také vědět, jak tento program spustit, abyste jej mohli vidět v akci.

CGI je jazykově nezávislý, takže tento program můžete implementovat v jakémkoli jazyce. K prokázání nezávislosti každého jazyka se zde používá několik různých jazyků. V Perlu je program "Ahoj, světe!" zobrazeno ve výpisu 2.1.

Výpis 2.1. Ahoj světe! v Perlu. #!/usr/local/bin/perl # Hello.cgi - Můj první CGI program tiskne "Content-Type: text/html\n\n"; tisk " \n"; tisknout" Ahoj světe!"; tisk "\n"; tisknout" \n"; tisknout"

Ahoj světe!

\n"; tisknout"

\n";

Uložte tento program jako hello.cgi a nainstalujte jej do příslušného umístění. (Pokud si nejste jisti, kde to je, nemějte obavy; to zjistíte v části "Instalace a spuštění programu CGI" dále v této kapitole.) Pro většinu serverů je potřebný adresář cgi-bin . Nyní zavolejte program z webového prohlížeče. Pro většinu to znamená otevření následujícího jednotného lokátoru zdrojů (URL):

http://hostname/directoryname/hello.cgi

Hostname je název vašeho webového serveru a directoryname je adresář, kam jste vložili hello.cgi (pravděpodobně cgi-bin).

Rozdělení hello.cgi

O hello.cgi je třeba poznamenat několik věcí.

Nejprve použijete jednoduché příkazy pro tisk. Programy CGI nevyžadují žádné speciální deskriptory souborů ani výstupní deskriptory. Chcete-li odeslat výstup do prohlížeče, jednoduše vytiskněte na stdout.

Za druhé si uvědomte, že obsah prvního tiskového prohlášení (Content-Type: text/html) se nezobrazí ve vašem webovém prohlížeči. Zpět do prohlížeče můžete odeslat jakékoli informace, které chcete (stránku HTML, grafiku nebo zvuk), ale nejprve musíte prohlížeči sdělit, jaký druh dat posíláte. Tento řádek sděluje prohlížeči, jaké informace má očekávat – v tomto případě stránku HTML.

Za třetí, program se jmenuje hello.cgi. Nemusíte vždy používat příponu .cgi s názvem vašeho CGI programu. Ačkoli zdrojový kód pro mnoho jazyků také používá příponu .cgi, nepoužívá se k označení typu jazyka, ale je to způsob, jakým server identifikuje soubor jako spustitelný soubor, nikoli jako grafický soubor, soubor HTML nebo textový soubor. Servery jsou často nakonfigurovány tak, aby se pokoušely spustit pouze ty soubory, které mají tuto příponu, a zobrazují obsah všech ostatních. Ačkoli použití přípony .cgi není vyžadováno, stále se považuje za dobrou praxi.

Obecně se hello.cgi skládá ze dvou hlavních částí:

  • sděluje prohlížeči, jaké informace má očekávat (Content-Type: text/html)
  • říká prohlížeči, co má zobrazit (Ahoj, světe!)

Ahoj světe! v C

Abychom ukázali jazykovou nezávislost CGI programů, výpis 2.2 ukazuje ekvivalent programu hello.cgi napsaného v C.

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

Ahoj světe!

\n"); printf("

\n"); )

Poznámka

Všimněte si, že perlová verze hello.cgi používá Content-Type print ": text/html\n\n "; Zatímco verze C používá Printf("Content-Type: text/html\r\n\r\n");

Proč Perl tiskne operátor končí dvěma řádky (\n), zatímco C printf končí dvěma návraty vozíku a novými řádky (\r\n)?

Technicky se očekává, že záhlaví (všechny výstup před prázdným řádkem) budou odděleny znaky konce řádku a novými řádky. Na strojích DOS a Windows bohužel Perl překládá \r jako další nový řádek spíše než jako návrat vozíku.

Ačkoli je výjimka \rs v Perlu technicky nesprávná, bude fungovat téměř na všech protokolech a je stejně přenosná na všech platformách. Proto ve všech příkladech v Perlu v této knize používám záhlaví oddělující nový řádek spíše než znaky konce řádku a nové řádky.

Vhodné řešení tohoto problému je uvedeno v kapitole 4, Závěr.

Webový server ani prohlížeč nezajímá, v jakém jazyce se program píše. Přestože každý jazyk má jako programovací jazyk CGI výhody a nevýhody, je nejlepší použít jazyk, se kterým se vám nejlépe pracuje. (Výběr programovacího jazyka je podrobněji popsán v kapitole 1 „Common Gateway Interface (CGI)“).

CGI vykreslování

Nyní se můžete blíže podívat na problematiku odesílání informací do webového prohlížeče. Z příkladu "Hello, World!" můžete vidět, že webové prohlížeče očekávají dvě sady dat: záhlaví, které obsahuje informace, jako jsou informace, které se mají zobrazit (např. Content-Type: řádek) a skutečné informace (co webový prohlížeč displeje). Tyto dvě informace jsou odděleny prázdným řádkem.

Hlavička se nazývá hlavička HTTP. Poskytuje důležité informace o informacích, které prohlížeč obdrží. Existuje několik různých typů HTTP hlaviček a nejběžnější je ta, kterou jste používali dříve: Content-Type: hlavička. Můžete použít různé kombinace hlaviček HTTP, oddělených znaky konce řádku a novými řádky (\r\n). Prázdný řádek, který odděluje záhlaví od dat, se také skládá z konce řádku a nového řádku (proč je obojí potřeba, je stručně popsáno v předchozí poznámce a podrobně popsáno v kapitole 4). O dalších HTTP hlavičkách se dozvíte v kapitole 4; V současné době se zabýváte záhlavím Content-Type:.

Content-Type: Hlavička popisuje typ dat, která CGI vrací. Vhodný formát pro toto záhlaví je:

Content-Type: podtyp/typ

Kde podtyp/typ je správný typ MIME (Multipurpose Internet Mail Extensions). Nejběžnějším typem MIME je typ HTML: text/html. Tabulka 2.1 uvádí několik dalších běžných typů MIME, o kterých bude řeč; Úplnější seznam a analýza typů MIME je uveden v kapitole 4.

Poznámka

MIME byl původně vynalezen k popisu obsahu těl poštovních zpráv. Stalo se poměrně běžným způsobem reprezentace informací typu Content-Type. Více o MIME si můžete přečíst v RFC1521. RFC on the Internet znamená Requests for Comments, což jsou souhrny rozhodnutí učiněných skupinami na internetu, které se snaží stanovit standardy. Výsledky RFC1521 si můžete prohlédnout na následující adrese: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Tabulka 2.1. Některé běžné MIME typy. MIME Typ Popis Text/html Hypertext Markup Language (HTML) Textové/prosté textové soubory Obrázek/gif Grafické soubory GIF Obrázek/jpeg Komprimované grafické soubory JPEG Audio/základní zvukové soubory Sun *.au Audio/x-wav Soubory Windows * wav

Po záhlaví a prázdném řádku jednoduše vytisknete údaje v podobě, kterou potřebujete. Pokud posíláte HTML, vytiskněte HTML tagy a data na stdout za hlavičkou. Můžete také odeslat grafiku, zvuk a další binární soubory jednoduchým vytištěním obsahu souboru na stdout. Několik příkladů je uvedeno v kapitole 4.

Instalace a spuštění programu CGI

Tato část se poněkud odchyluje od programování CGI a hovoří o konfiguraci vašeho webového serveru pro použití CGI, instalaci a spouštění programů. Budete více či méně podrobně seznámeni s různými servery pro různé platformy, ale budete muset prozkoumat dokumentaci svého serveru, abyste našli tu nejlepší možnost.

Všechny servery vyžadují prostor pro soubory serveru a prostor pro dokumenty HTML. V této knize se oblast serveru nazývá ServerRoot a oblast dokumentu se nazývá DocumentRoot. Na počítačích se systémem UNIX je ServerRoot obvykle v /usr/local/etc/httpd/ a DocumentRoot je obvykle v /usr/local/etc/httpd/htdocs/. To však nebude mít žádný vliv na váš systém, takže nahraďte všechny odkazy na ServerRoot a DocumentRoot svými vlastními ServerRoot a DocumentRoot.

Když přistupujete k souborům pomocí webového prohlížeče, zadáte soubor v adrese URL vzhledem k DocumentRoot. Pokud je například adresa vašeho serveru mymachine.org, pak k tomuto souboru přistupujete pomocí následující adresy URL: http://mymachine.org/index.html

Konfigurace serveru pro CGI

Většina webových serverů je předkonfigurována tak, aby umožňovala používání programů CGI. Obvykle dva parametry indikují serveru, zda je soubor aplikací CGI či nikoli:

  • Určený adresář. Některé servery umožňují určit, že všechny soubory v určeném adresáři (standardně nazývaném cgi-bin) jsou CGI.
  • Přípony názvů souborů. Mnoho serverů má tuto předkonfiguraci, která umožňuje, aby všechny soubory končící na .cgi byly definovány jako CGI.

Metoda určeného adresáře je něco jako pozůstatek minulosti (úplně první servery ji používaly jako jedinou metodu pro určení, které soubory byly programy CGI), ale má několik výhod.

  • Udržuje programy CGI centralizované, čímž zabraňuje zahlcení ostatních adresářů.
  • Nejste omezeni na žádnou konkrétní příponu názvu souboru, takže si můžete soubory pojmenovat, jak chcete. Některé servery umožňují označit několik různých adresářů jako adresáře CGI.
  • Poskytuje vám také větší kontrolu nad tím, kdo může nahrávat CGI. Pokud například máte server a podporujete systém s více uživateli a nechcete, aby používali své vlastní skripty CGI bez předchozího auditu programu z bezpečnostních důvodů, můžete jako CGI označit pouze ty soubory v omezeném centralizovaném adresáři. . Uživatelé vám pak budou muset poskytnout programy CGI k instalaci a vy můžete nejprve zkontrolovat kód, abyste se ujistili, že program nemá žádné zásadní bezpečnostní problémy.

CGI notace přes příponu názvu souboru může být užitečná díky své flexibilitě. Pro programy CGI nejste omezeni na jeden jediný adresář. Většinu serverů lze nakonfigurovat tak, aby rozpoznávaly CGI prostřednictvím přípony názvu souboru, i když ne všechny jsou takto konfigurovány ve výchozím nastavení.

Varování

Pamatujte na důležitost bezpečnostních problémů při konfiguraci serveru pro CGI. Zde budou uvedeny některé tipy a kapitola 9, Ochrana CGI, pokrývá tyto aspekty podrobněji.

Instalace CGI na servery UNIX

Bez ohledu na to, jak je nakonfigurován váš UNIX server, je třeba provést několik kroků, abyste zajistili, že vaše aplikace CGI běží podle očekávání. Váš webový server obvykle poběží jako neexistující uživatel (tj. uživatel UNIX nikdo – účet, který nemá žádná oprávnění k souborům a nelze se k němu přihlásit). CGI skripty (napsané v Perlu, Bourne shellu nebo jiném skriptovacím jazyce) musí být spustitelné a čitelné po celém světě.

Vodítko

Chcete-li, aby byly vaše soubory dobře čitelné a spustitelné, použijte následující příkaz UNIX pro oprávnění: chmod 755 filename.

Pokud používáte skriptovací jazyk, jako je Perl nebo Tcl, uveďte na prvním řádku skriptu úplnou cestu k vašemu interpretu. Například skript Perl používající perl v adresáři /usr/local/bin by začínal následujícím řádkem:

#!/usr/local/bin/perl

Varování

Nikdy neumisťujte interpret (perl nebo binární soubor Tcl Wish) do adresáře /cgi-bin. To vytváří bezpečnostní riziko ve vašem systému.

Některé generické servery UNIX

Servery NCSA a Apache mají podobné konfigurační soubory, protože server Apache byl původně založen na kódu NCSA. Ve výchozím nastavení jsou nakonfigurovány tak, že jakýkoli soubor v adresáři cgi-bin (ve výchozím nastavení se nachází v ServerRoot) je program CGI. Chcete-li změnit umístění adresáře cgi-bin, můžete upravit konfigurační soubor conf/srm.conf. Formát pro konfiguraci tohoto adresáře je

ScriptAlias ​​​​fakedirectoryname název skutečného adresáře

kde fakedirectoryname je pseudonázev adresáře (/cgi-bin) a realdirectoryname je úplná cesta, kde jsou CGI programy skutečně uloženy. Můžete nakonfigurovat více než jeden ScriptAlias ​​přidáním více řádků ScriptAlias.

Výchozí konfigurace je dostatečná pro potřeby většiny uživatelů. Chcete-li určit správný název skutečného adresáře, musíte v obou případech upravit řádek v souboru srm.conf. Pokud jsou například vaše CGI programy umístěny v /usr/local/etc/httpd/cgi-bin, řádek ScriptAlias ​​​​ve vašem souboru srm.conf by měl vypadat takto:

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

Chcete-li získat přístup nebo odkaz na programy CGI umístěné v tomto adresáři, použijte následující adresu URL:

Http://hostname/cgi-bin/programname

Kde hostname je název hostitele vašeho webového serveru a programname je název vašeho CGI.

Řekněme například, že zkopírujete program hello.cgi do vašeho adresáře cgi-bin (např. /usr/local/etc/httpd/cgi-bin) na vašem webovém serveru s názvem www.company.com. Pro přístup ke svému CGI použijte následující URL: http://www.company.com/cgi-bin/hello.cgi

Pokud chcete nakonfigurovat server NCSA nebo Apache tak, aby rozpoznal jakýkoli soubor s příponou .cgi jako CGI, musíte upravit dva konfigurační soubory. Nejprve v souboru srm.conf odkomentujte následující řádek:

AddType application/x-httpd-cgi .cgi

Tím se přidruží typ MIME CGI s příponou .cgi. Nyní musíme změnit soubor access.conf, abychom mohli spouštět CGI v libovolném adresáři. Chcete-li to provést, přidejte možnost ExecCGI na řádek Option. Bude to vypadat nějak jako následující řádek:

Indexy možností Sledujte SymLinks ExecCGI

Nyní je jakýkoli soubor s příponou .cgi považován za CGI; přistupovat k němu jako k jakémukoli souboru na vašem serveru.

Server CERN je konfigurován stejným způsobem jako servery Apache a NCSA. Místo ScriptAlias ​​používá server CERN příkaz Exec. Například v souboru httpd.conf uvidíte následující řádek:

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

Ostatní servery UNIX lze konfigurovat stejným způsobem; Toto je podrobněji popsáno v dokumentaci k serveru.

Instalace CGI na Windows

Většina serverů dostupných pro Windows 3.1, Windows 95 a Windows NT je konfigurována pomocí metody "filename extension" pro rozpoznávání CGI. Obecně platí, že změna konfigurace serveru se systémem Windows jednoduše vyžaduje spuštění konfiguračního programu serveru a provedení příslušných změn.

Někdy může být konfigurace serveru pro správné spouštění skriptu (jako je Perl) obtížná. V DOS nebo Windows nebudete moci zadat interpret na prvním řádku skriptu, jako je tomu v případě UNIXu. Některé servery mají předdefinovanou konfiguraci pro přidružení určitých přípon souborů k interpretu. Mnoho webových serverů Windows například předpokládá, že soubory končící na .pl jsou skripty v jazyce Perl.

Pokud server tento typ přidružení souborů neprovádí, můžete definovat dávkový soubor balíčkovače, který volá interpret i skript. Stejně jako u serveru UNIX neinstalujte interpret ani do adresáře cgi-bin ani do žádného adresáře přístupného z webu.

Instalace CGI na Macintosh

Dvě nejznámější možnosti serveru pro Macintosh jsou WebStar StarNine a jeho předchůdce MacHTTP. Oba rozpoznávají CGI podle přípony názvu souboru.

MacHTTP rozumí dvěma různým příponám: .cgi a .acgi, což znamená asynchronní CGI. Běžné programy CGI nainstalované na počítači Macintosh (s příponou .cgi) udrží webový server v zaneprázdněném stavu, dokud nedokončí běh CGI, což způsobí, že server pozastaví všechny ostatní požadavky. Asynchronní CGI na druhé straně umožňuje serveru přijímat požadavky, i když je spuštěn.

Vývojář CGI Macintosh používající kterýkoli z těchto webových serverů by měl, pokud je to možné, používat pouze příponu .acgi spíše než příponu .cgi. Měl by fungovat s většinou CGI programů; pokud to nefunguje, přejmenujte program na .cgi.

Provádění CGI

Jakmile nainstalujete CGI, existuje několik způsobů, jak jej spustit. Pokud je váš program CGI pouze výstupní, např Ahoj programy,World!, pak jej můžete spustit jednoduše přístupem k jeho URL.

Většina programů běží jako serverová aplikace ve formuláři HTML. Než se naučíte získávat informace z těchto formulářů, přečtěte si nejprve krátký úvod o vytváření takových formulářů.

Rychlý návod na HTML formuláře

Dvě nejdůležitější značky ve formě HTML jsou

A . Většinu formulářů HTML můžete vytvořit pouze pomocí těchto dvou značek. V této kapitole prozkoumáte tyto značky a malou podmnožinu možných typů nebo atributů. . Kompletní průvodce a odkaz na formuláře HTML je v kapitole 3, HTML a formuláře.

Štítek

Štítek slouží k určení, která část souboru HTML by měla být použita pro uživatelem zadané informace. To se týká toho, jak většina stránek HTML nazývá CGI program. Atributy tagů určují název a umístění programu – buď lokálně, nebo jako úplné URL, typ použitého kódování a metodu přesunu dat, kterou program používá.

Na dalším řádku jsou uvedeny specifikace pro značku :

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

Atribut ENCTYPE nehraje zvláštní roli a obvykle není součástí značky . detailní informace o tagu ENCTYPE je uveden v kapitole 3. Jeden způsob použití ENCTYPE je uveden v kapitole 14, "Značková rozšíření."

Atribut ACTION odkazuje na URL programu CGI. Jakmile uživatel vyplní formulář a poskytne informace, všechny informace jsou zakódovány a přeneseny do programu CGI. Samotný program CGI řeší problém dekódování a zpracování informací; Tento aspekt je popsán v části „Přijímání vstupu z prohlížeče“ dále v této kapitole.

Nakonec atribut METHOD popisuje, jak by měl program CGI přijímat vstup. Tyto dvě metody, GET a POST, se liší v tom, jak předávají informace programu CGI. Oba jsou popsány v části „Přijímání vstupu z prohlížeče“.

Aby prohlížeč umožnil vstup uživatele, musí být tagem obklopeny všechny značky formuláře a informace . Nezapomeňte na závěrečný štítek

k označení konce formuláře. Nemůžete mít formulář ve formuláři, i když můžete nastavit formulář, který vám umožní prezentovat informace na různých místech; tento aspekt je podrobně diskutován v kapitole 3.

Štítek

Pomocí tagu můžete vytvořit pruhy pro zadávání textu, přepínače, zaškrtávací políčka a další prostředky pro přijímání vstupu . V tato sekce berou v úvahu pouze pole zadávání textu. K implementaci tohoto pole použijte značku s následujícími atributy:

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

NAME je symbolický název proměnné, která obsahuje hodnotu zadanou uživatelem. Pokud do atributu VALUE zahrnete text, bude tento text umístěn jako výchozí do pole pro zadávání textu. Atribut SIZE umožňuje definovat vodorovnou délku vstupního pole, jak se zobrazí v okně prohlížeče. Nakonec MAXLENGTH určuje maximální počet znaků, které může uživatel do pole zadat. Upozorňujeme, že atributy VALUE, SIZE, MAXLENGTH jsou volitelné.

Odeslání formuláře

Pokud máte ve formuláři pouze jedno textové pole, může uživatel formulář odeslat jednoduše zadáním informací na klávesnici a stisknutím klávesy Enter. V opačném případě musí existovat nějaký jiný způsob, jak může uživatel prezentovat informace. Uživatel odešle informace pomocí tlačítka pro odeslání další značka:

< Input type=submit >

Tato značka se vytvoří ve vašem formuláři Tlačítko Odeslat. Když uživatel dokončí vyplňování formuláře, může odeslat jeho obsah prostřednictvím URL adresa, specifikovaný atributem AKČNÍ formuláře kliknutím na tlačítko Odeslat.

Přijímání vstupu z prohlížeče

Výše byly uvedeny příklady nahrávání programu CGI, který odesílá informace ze serveru do prohlížeče. Ve skutečnosti CGI program, který pouze vydává data, nemá mnoho aplikací (některé příklady jsou uvedeny v kapitole 4). Více důležitá schopnost CGI je získávání informací z prohlížeče – funkce, která dává webu jeho interaktivní charakter.

Program CGI přijímá z prohlížeče dva typy informací.

  • Nejprve získá různé informace o prohlížeči (jeho typ, co může zobrazit, hostitelském hostiteli atd.), serveru (jeho název a verze, jeho spouštěcí port atd.) a programu CGI. (název programu a kde se nachází). Server poskytuje všechny tyto informace programu CGI prostřednictvím proměnných prostředí.
  • Zadruhé, CGI program může přijímat uživatelský vstup. Tyto informace jsou po zakódování prohlížečem odeslány buď prostřednictvím proměnné prostředí (metoda GET) nebo standardního vstupu (metoda stdin - POST).

Proměnné prostředí

Je užitečné vědět, jaké proměnné prostředí jsou k dispozici programu CGI, a to jak během školení, tak pro ladění. Tabulka 2.2 uvádí některé dostupné proměnné prostředí CGI. Můžete také napsat CGI program, který odesílá proměnné prostředí a jejich hodnoty do webového prohlížeče.

Tabulka 2.2. Některé důležité proměnné prostředí CGI Proměnná prostředí Účel REMOTE_ADDR IP adresa klientského počítače. REMOTE_HOST Hostitel hostitele klientského počítače. HTTP _ACCEPT Uvádí typy dat MIME, které může prohlížeč interpretovat. HTTP _USER_AGENT Informace o prohlížeči (typ prohlížeče, číslo verze, operační systém, atd.). REQUEST_METHOD GET nebo POST. CONTENT_LENGTH Velikost vstupu, pokud je odeslán prostřednictvím POST. Pokud neexistuje žádný vstup nebo je použita metoda GET, tento parametr není definován. QUERY_STRING Obsahuje vstupní informace, když jsou předány pomocí metody GET. PATH_INFO Umožňuje uživateli zadat cestu z příkazového řádku CGI linky(např. http://hostname/cgi-bin/programname/cesta). PATH_TRANSLATED Překládá relativní cesta v PATH_INFO ke skutečné cestě v systému.

Chcete-li napsat aplikaci CGI, která zobrazuje proměnné prostředí, musíte vědět, jak udělat dvě věci:

  • Definujte všechny proměnné prostředí a jejich odpovídající hodnoty.
  • Tisk výsledků do prohlížeče.

Už víte, jak na to poslední operace. V Perlu jsou proměnné prostředí uloženy v asociativním poli %ENV, které je uvozeno názvem proměnná prostředí. Výpis 2.3 obsahuje env.cgi, program v Perlu, který splňuje náš cíl.

Výpis 2.3. Perlský program, env.cgi, který vytiskne všechny proměnné prostředí CGI.

#!/usr/local/bin/perl print "Typ obsahu: text/html\n\n"; tisk " \n"; tisknout" Prostředí CGI\n"; tisknout"\n"; tisknout" \n"; tisknout"

Prostředí CGI

\n"; foreach $env_var (klávesy %ENV) ( tisk " $env_var= $ENV($env_var)
\n"; ) tisknout "

\n";

Podobný program by mohl být napsán v C; úplný kód je ve výpisu 2.4.

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

Prostředí CGI

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

\n"); )

GET nebo POST?

Jaký je rozdíl mezi metodami GET a POST? GET předává zakódovaný vstupní řetězec přes proměnnou prostředí QUERY_STRING, zatímco POST jej předává přes stdin. POST je preferovaná metoda, zejména pro formuláře s velké množství data, protože neexistují žádná omezení týkající se množství odesílaných informací a kdy metoda GET množství environmentálního prostoru je omezené. GET má však jisté užitečná vlastnost; to je podrobně popsáno v kapitole 5, Vstup.

K určení, která metoda se použije, program CGI zkontroluje proměnnou prostředí REQUEST_METHOD, která bude nastavena na GET nebo POST. Pokud je nastavena na POST, je délka zakódovaných informací uložena v proměnné prostředí CONTENT_LENGTH.

Kódovaný vstup

Když uživatel odešle formulář, prohlížeč nejprve zakóduje informace před jejich odesláním na server a poté do aplikace CGI. Když použijete značku , každé pole má symbolický název. Hodnota zadaná uživatelem je reprezentována jako hodnota proměnné.

K určení toho používá prohlížeč specifikaci kódování URL, která může být popsána takto:

  • Odděluje různá pole znakem ampersand (&).
  • Odděluje název a hodnoty rovnítkem (=), přičemž název je vlevo a hodnota vpravo.
  • Nahradí mezery znaménkem plus (+).
  • Nahradí všechny "nenormální" znaky znakem procenta (%) následovaným dvoumístným znakem hexadecimální kód symbol.

Váš konečný zakódovaný řetězec bude podobný následujícímu:

Name1=value1&name2=value2&name3=value3 ...

Poznámka: Specifikace pro kódování URL naleznete v RFC1738.

Řekněme například, že jste měli formulář, který požadoval jméno a věk. HTML kód, který byl použit k zobrazení tohoto formuláře, je uveden ve výpisu 2.5.

Výpis 2.5. HTML kód pro zobrazení formuláře jména a věku.

Jméno a věk

Zadejte své jméno:

Zadejte svůj věk:



Řekněme, že uživatel zadá do pole jména Joe Schmoe a do pole věk 20. Vstup bude zakódován ve vstupním řetězci.

Jméno=Joe+Schmoe&věk=20

Analýza vstupu

Aby byly tyto informace užitečné, musíte použít informace o něčem, co mohou používat vaše CGI programy. Strategie pro analýzu vstupu jsou popsány v kapitole 5. V praxi nikdy nebudete muset přemýšlet o tom, jak vstup analyzovat, protože několik odborníků již vytvořilo knihovny, které analýzu provádějí, a jsou přístupné všem. Dvě takové knihovny jsou uvedeny v této kapitole v následujících částech: cgi -lib.pl pro Perl (napsal Steve Brenner) a cgihtml pro C (napsal jsem já).

Obecným cílem většiny knihoven napsaných v různých jazycích je analyzovat zakódovaný řetězec a vložit páry jmen a hodnot do datové struktury. Dostupný zjevná výhoda v používání jazyka, který má vestavěné datové struktury jako Perl; nicméně většina jazykových knihoven nižší úroveň typ C a C++ zahrnuje provádění datových struktur a rutin.

Není nutné dosáhnout úplného pochopení knihoven; mnohem důležitější je naučit se je používat nástroje usnadnit CGI programátorovi práci.

Cgi-lib.pl

Cgi-lib.pl používá asociativní Pole Perl. Funkce &ReadParse analyzuje vstupní řetězec a zadá každý pár název/hodnota podle názvu. Například odpovídající řetězce Perl potřebné k dekódování právě prezentovaného vstupního řetězce "jméno/věk" by byly

&ReadParse(*vstup);

Nyní, abyste viděli hodnotu zadanou pro "name", můžete přistupovat asociativní pole$input("jméno"). Podobně, abyste získali přístup k hodnotě „věk“, musíte se podívat na proměnnou $input („věk“).

Cgihtml

C nemá žádné vestavěné datové struktury, takže cgihtml dělá svou vlastní věc vlastní seznam připojení pro použití s ​​vašimi rutinami analýzy CGI. To definuje strukturu entrytype takto:

Typedef struct ( Char *název; Char *hodnota; ) Entrytype;

K analýze vstupního řetězce "jméno/věk" v C pomocí cgihtml se používá následující:

/* prohlásit spojový seznam, nazvaný input */ Llist input; /* analyzovat vstup a umístění v propojeném seznamu */ read_cgi_input(&input);

Chcete-li získat přístup k informacím o věku, můžete seznam analyzovat ručně nebo použít dostupnou funkci cgi _val().

#zahrnout #zahrnout Char *věk = malloc(sizeof(char)*strlen(cgi_val(vstup, "věk")) + 1); Strcpy(věk, cgi_val(vstup, "věk"));

Hodnota "věk" je nyní uložena v řetězci věku.

Poznámka: Místo použití jednoduché pole(jako char age ;), dělám dynamická distribuce paměťový prostor pro věk řetězce. To sice ztěžuje programování, nicméně je to důležité z hlediska bezpečnosti. To je podrobněji rozebráno v kapitole 9.

Jednoduchý CGI program

Chystáte se napsat CGI program s názvem nameage.cgi, který zpracuje formulář jméno/věk. Zpracování dat (to, co obvykle nazývám "věci mezi") je minimální. Nameage.cgi jednoduše dekóduje vstup a zobrazí jméno a věk uživatele. I když pro takový nástroj není mnoho využití, demonstruje nejkritičtější aspekt programování CGI: vstup a výstup.

Použijte stejný formulář jako výše, vyvolejte pole „jméno a věk“. O robustnost a efektivitu si zatím nedělejte starosti; vyřešit stávající problém tím nejjednodušším způsobem. Řešení Perl a C jsou uvedena ve výpisech 2.6 a 2.7.

Výpis 2.6. Nameage.cgi v Perlu

#!/usr/local/bin/perl # nameage.cgi vyžaduje "cgi-lib.pl" &ReadParse(*input); tisk "Typ obsahu: text/html\r\n\r\n"; tisk " \n"; tisknout" Jméno a věk\n"; tisknout"\n"; tisknout" \n"; vytisknout "Dobrý den, " . $input("name") . ". Jste\n"; vytiskněte $input("věk") . " let.

\n"; tisknout"

\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(" Jméno a věk\n"); printf("\n"); printf(" \n"); printf("Dobrý den, %s. Jste\n",cgi_val(vstup,"jméno")); printf("%s let.

\n",cgi_val(vstup,"věk")); printf("

\n"); )

Upozorňujeme, že tyto dva programy jsou téměř ekvivalentní. Oba obsahují rutiny analýzy, které zabírají pouze jeden řádek a zpracovávají celý vstup (díky odpovídajícím knihovním rutinám). Výstupem je v podstatě upravená verze vašeho hlavního programu Hello, World!

Zkuste program spustit vyplněním formuláře a kliknutím na tlačítko Odeslat.

Obecná programovací strategie

Nyní znáte všechny základní principy potřebné pro programování CGI. Když pochopíte, jak CGI přijímá informace a jak je posílá zpět do prohlížeče, skutečná kvalita vašeho finální produkt záleží na tvém obecné schopnosti k programování. Totiž, když programujete CGI (nebo cokoliv jiného, ​​když na to přijde), mějte na paměti následující vlastnosti:

  • Jednoduchost
  • Účinnost
  • Všestrannost

První dvě vlastnosti jsou docela běžné: snažte se, aby byl váš kód co nejčitelnější a nejefektivnější. Všestrannost se týká více programů CGI než jiných aplikací. Když začnete rozvíjet své vlastní programy CGI, dozvíte se, že existuje několik základních aplikací, které chce dělat každý. Například jedním z nejběžnějších a nejzřejmějších úkolů programu CGI je zpracovat formulář a poslat výsledky e-mailem konkrétnímu příjemci. Můžete mít zpracováno více samostatných formulářů, každý s jiným příjemcem. Místo psaní CGI programu pro každý jednotlivý formulář můžete ušetřit čas tím, že budete psát další obecný program CGI, které funguje pro všechny formy.

Pokrytím všech základních aspektů CGI jsem vám poskytl dostatek informací, abyste mohli začít s programováním CGI. Chcete-li se však stát efektivním vývojářem CGI, musíte hlouběji porozumět tomu, jak CGI komunikuje se serverem a prohlížečem. Zbytek této knihy podrobně popisuje problémy, které byly stručně zmíněny v této kapitole, stejně jako strategii vývoje aplikací a výhody a omezení protokolu.

souhrn

Tato kapitola stručně představila základy programování CGI. Výstup vytvoříte správným formátováním dat a tiskem na stdout. Příjem CGI vstupu je o něco složitější, protože musí být před použitím analyzován. Naštěstí již existuje několik knihoven, které provádějí analýzu.

NA momentálně Programování CGI aplikací byste měli zvládnout poměrně snadno. Zbytek této knihy se podrobněji zabývá specifikacemi, tipy a programovacími strategiemi pro pokročilejší a složitější aplikace.

Strana 1 z 30

Dnes věci jako Kniha návštěv, vyhledávání na serveru, formulář pro odesílání zpráv - nedílný atribut téměř každé seriózní stránky. Problém zavádění těchto a dalších zvonků a píšťalek samozřejmě všemi možnými způsoby vzrušuje představivost začínajícího webmastera, zbavuje ho spánku, chuti k jídlu a touhy po pivu. Studium HTML zdrojů konkurenčních stránek bohužel nedává nic jiného než odkazy na určitý "cgi-bin" a v diskusních skupinách se občas objeví zmínka o nějakých cgi skriptech. Tento článek je věnován základům používání stejných CGI skriptů pro slávu a prosperitu vašeho webu.

Pro začátek si myslím, že musíme porozumět pojmům. CGI skript je program, který běží na webovém serveru na žádost klienta (tj. návštěvníka webu). Tento program se v zásadě neliší od pravidelné programy, které jsou nainstalovány na vašem počítači – ať už jde o MS Word nebo hru Quake. CGI není programovací jazyk, ve kterém je skript napsán, ale rozhraní Common Gateway - speciální rozhraní, s jehož pomocí se skript spouští a interaguje s ním.

Krátká odbočka o CGI

Tak co to je CGI- scénáře a podobné věci obecně. Začněme tím, že váš prohlížeč (když jste zadali URL) se připojuje přes protokol HTTP se zadaným serverem a požádá ho o požadovaný soubor, něco takového:

GET /~paaa/cgi-bin/guestbbok.cgi HTTP/1.0-To je nejdůležitější věc v žádosti

Pokud je například požadován jednoduchý soubor .html pokud takový soubor existuje, server odešle prohlížeči odpověď:

HTTP/1.0 200 Dobře
Typ obsahu: text/html

Dále za prázdný řádek (je potřeba oddělit titul z tělo) informace pocházejí z URL"A ...
To je v podstatě vše WWW...přecházíte od odkazu k odkazu....
Co když potřebujete k tomuto nudnému procesu něco přidat? opravdu interaktivní, dynamické, krásné a velkolepé....? No, na tuto otázku existuje odpověď. Jen co když v požadovaném URL uveďte speciální program ( CGI,program Společné rozhraní brány - Všeobecné Rozhraní brány ) a to, co tento program vyprodukuje, je poté odesláno do prohlížeče.... Server se spustí .cgi program a např. po zpracování údajů formuláře Vás zapíše někam do svého databáze a vás o tom informuje jsi super kluk :)
Tak doufám, že jsem vás zaujal......?

Stručné informace o tom, co potřebujete vědět, abyste mohli psát CGI scripts: No, nejdřív ze všeho musíte vědět, co to je Internet a jak to funguje (víte? ;))) ) No a trochu programátorských schopností (to je nejdůležitější)
Pojďme spolu napsat nějaký jednoduchý scénář a pak vám řeknu, kde se pes hrabal...
Nejprve si vytvořte adresář ve svém domovském adresáři cgi-bin:

cd public_html
mkdir cgi-bin
chmod 0777 cgi-bin

Poslední řádek bude velmi důležitý.
Vezměte editor a napište: #!/usr/bin/perl
#first.cgi
tisk "Typ obsahu: text/html\n\n";
tisk " ";
tisk "

Ahoj!!!

";
tisk "";

Uložte jej do adresáře cgi-bin pod jménem první.cgi.No, jak jsi to zachránil?
Nyní jej udělejte spustitelným (koneckonců je to program):

chmod +x první.cgi

Blížíme se k slavnostnímu okamžiku... napište do řádku prohlížeče http://www.uic.nnov.ru/~your_login/cgi-bin/first.cgi
a uvidíte, co se stane. Bude to jedna ze dvou věcí, buď bude skript fungovat a uvidíte stránku, kterou vygeneroval (gratulujeme, dorazil náš pluk!) nebo Interní server Chyba-tak se nezlob, udělal jsi něco špatně. Pak budete potřebovat návod k odchytu blech. Nejprve lze kontrolu syntaxe provést následovně:

perl -with first.cgi

Perl vám okamžitě zobrazí buď chybové hlášky (no, někdy jste vynechali středník, zapomněli uzavřít závorky nebo uvozovky...), to lze okamžitě opravit.
Logičtějším přístupem je přeskočit výstup prázdného řádku, který odděluje záhlaví od těla:
tisk "Typ obsahu: text/html\n\n"; #Všechno je správně
tisk "Typ obsahu: text/html\n"; #CHYBA!!!

Pojďme analyzovat skript:
První řada #!/usr/bin/perl Jednoduše ukazuje, kde se Perl v systému nachází. Druhý je jen komentář - po cedulce můžete šťouchat cokoliv #
Pak přijde tisk "Typ obsahu: text/html\n\n"; Toto je záhlaví označující typ obsahu všeho, co skript vytiskne standardní výstup STDOUT přejde na server ke zpracování. Prázdný řádek odděluje záhlaví od těla, což v našem případě je

Ahoj!!!



Server zpracuje odpověď skriptu a na základě ní vygeneruje a odešle odpověď do prohlížeče (Server obvykle nemění tělo zprávy, pouze doplní hlavičku o potřebné HTTP protokol pole)

No, základy už jsou zvládnuté, vše není tak těžké a depresivní, jak by se mohlo na první pohled zdát
Nyní si můžete sami procvičovat psaní takových jednoduchých skriptů, abyste se v tom zdokonalili.






Horní