Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Vodič za pisanje "CGI" skripti u "REXX"-u i "Perl"-u




__________________________________________________________________________________________________________________________

Sadrzaj

__________________________________________________________________________________________________________________________

Uvod


Ovaj vodič je namenjen ljudima koji žele da napišu sopstvene izvršne WWW skripte koristeći njegov opšti interfejs za mrežni prolaz "Common Gateway Interface" ( CGI). Iako je naglasak stavljen na "REXX" obezbeđeno je i dosta primera u "Perl"-u.

Postoje nokoliko jednostavnih softverskih biblioteka koje olakšavaju pisanje "CGI" skripti. cgi-lib.rxx je "REXX" biblioteka koja sadrži funkcije (dostupna u SLAC uz upotrebu REXX-a
CALL PUTENV 'REXXPATH=/afs/slac/www/slac/www/tool/cgi-rexx'
je izjava da se biblioteka uključi u vreme izvršavanja) i cgi-lib.pl je slična biblioteka u "Perl"-u koju je napisao Steve Brenner (postoji izvršna kopija ove biblioteke u "SLAC" na: /afs/slac/g/www/cgi-lib/cgi-lib.pl). "NCSA" poseduje veoma koristan set Perl CGI alata za rad sa pod-rutinama koje su dostupne preko anonimnih FTP (protokola za prenos podataka). Još jedan set "Perl" GUI Server Side Scripts (serverskih skripti) koji je napisao Brigitte Jellinek dostupne su u sastavu GNU javne licence. Takođe tu je i Source code for www.stanford.edu scripts and programs (izvršni kod za www.stanford.edu skripte i programe). Kao i index to Perl WWW programs (indeks Pearl www programa) koje je sakupio Earl Hood. Na kraju pogledajte i Web Development Center (web razvojni centar).

Pošto postoje bezbednosni i drugi rizici koji su povezani sa izvršavanjem korisničkih skripti na WWW serveru, Čitaoci bi možda prvo trebali da pogledaju dokument koji će im pružiti informacije u vezi SLAC-a , "Security Wrapper" za CGI skripte koje upotrebljavaju korisnici. Osim unapređivanja bezbednosti , "wrapper" takođe uproštava proces pisanja CGI skripti što je naročito pogodno za početnike.

Pre nego što započnete pisanje skripti možda će te želeti da pogledate neke osnovne beleške na "SLAC Web Utilities Provided by CGI Scripts" (SLAC web uslužni programi urađeni sa CGI skriptama).

CGI je interfejs koji omogućava pokretanje eksternih programa, ili mrežnih prolaza, pod informacionim serverom. Trenutno podržani informacioni serveri su: HTTP (protokol za transport podataka i informacija koji koriste WWW) serveri.

Mrežni programi spadaju u izvršne programe (UNIX skripte). oni mogu da budu samoizvršavajući (ali to nije poželjno osim u slučaju da radite debagovanje). Oni se prave izvršnim da bi mogli da rade pod različitim servisima za razmenu informacija. Mrežni programi koji ispunjavaju te specifikacije mogu biti napisani u bilo kom programskom jeziku, uključujući "REXX" ili "Perl", koji nam kao rezultat daju izvršni fajl.

Unošenje ulaznih vrednosti u Skriptu


Ulazne vrednosti se mogu poslati na skriptu na nekoliko načina u zavisnosti od klijentove jedinstvene web adrese "Uniform Resource Locator" (URL) ili (HTML) jezika. Forma: Možete da pogledate Fragmente REXX koda koji će vam pokazati način na koji možete pročitati različite forme unosa podataka u vašu skriptu.

"REXX PROCEDURE" ReadForm zajedno sa MethGet i MethPost, su dostupne u cgi-lib.rxx, mogu se koristiti za pojednostavljenje zadatka očitavanja ulaznih vrednosti iz forme.

Dekodiranje formi ulaza


Kada pišete Formu, svaka od vaših ulaznih stavki ima svoje ime "name" kao oznaku. Kada korisnik unosi podatke u te stavke u formi, ta informacija se kodira u samoj formi. Vrednost svake ulazne stavke je data od strane korisnika i naziva se "value".

Podaci u formi su niz name=value parova odvojeni ampersandom (&). Svaki name=value par je "URL" kodiran. Odnosno razmak se zamenjuje simbolom plus (+) i neki od karaktera se kodiraju heksadecimalno. Da bi dekodirali podatke iz forme morate prvo rasčlaniti blokove podataka iz forme u zasebne name=value parove odbacujući ampersandse. Zatim morate rasčlaniti svaki name=value par u zasebne name (ime) i value (vrednosti). Koristite prvi znak jednakosti na koji naiđete da razdvojite podatke. Ako ima više od jednog znaka onda je to signal da nešto nije u redu sa podacima.Ponovo odbacite znakove jednakosti. Nakon toga poništite URL kodiranje svaki od name (ime) i value (vrednosti).

Možete pogledati REXX ili Perl fragment koda za primer dekodiranja ulaza iz forme.

Kada koristite name (ime) i value (vrednosti) informacije u skripti, morate biti svesni da:

Vraćanje dokumenta nazad klijentu


CGI programi mogu da vrate mnogo različitih vrsta dokumenta. Oni mogu da vrate sliku klijentu, HTML dokument, dokument sa običnim tekstom, "Postscript" dokument, ili možda čak i audio klip Oni mogu da vrate reference drugim dokumentima (da bi se uštedelo na prostoru nećemo ogratiti pažnju na poslednji primer, više informacija u vezi toga se mogu naći na NCSA's CGI Primer). Klijent mora da zna koju vrstu dokumenta vi šaljete da bi bio u mogućnosti da je pravilno prikaže. Da bi klijent to znao vaš CGI program mora da prosledi serveru informaciju koju vrstu dokumenta vraćate.

Da bi ste rekli serveru koju vrstu dokumenta vraćate, CGI zahteva da postavite kratko zaglavlje na vašem izlaznom dokumentu. To zaglavlje je ASCII tekst, koji se sastoji od linija odvojenih pomoću znaka za novi red (linefeeds) ili kontrolnim karakterom koji je praćen znakom za novi red. Vaša skripta mora dati na izlazu barem dve takve linije pre nego što će podaci biti poslati nazad klijentu. Te linije se koriste da označe MIME tip dokumenta.

Neki od uobičajnih MIME tipova koji su relevantni za WWW su: Da bi smo saopštili serveru koji je tip našeg sadržaja na izlazu, prva linija vašeg izlaza treba da glasi:
"Content-type: type/subtype"
Gde su "type/subtype", MIME tip i podtip vašeg izlaza.

Dalje, trebate poslati drugu liniju. Po trenutnim specifikacijama DRUGA LINIJA TREBA DA BUDE PRAZNA. To znači da ne treba da sadrži ništa osim oznake za novi red. Kada server preuzme ovu liniju, znaće da ste završili sa saopštenjem informacija o tipu izlaza i da će te krenuti sa slanjem stvarnog izlaza. Ako preskočite ovu liniju server će pokušati da analizira vaš izlaz i da nađe dodatne informacije o vašem zahtevu što će vas učiniti veoma nezadovoljnim.

Možete pogledati Fragmente REXX koda da bi ste videli primerkako se rukuje sa informacijama vezanim za sadržaj "Content-type information".

Nakon što su te dve linije izašle, svaki izlaz na "stdout" (standardni izlaz), kao što je (REXX SAY command) biće uključen u dokument koji se šalje klijentu. Izlaz mora da bude u skladu sa zaglavljem za taj tip sadržaja (Content-type header). Na primer ako je zaglavlje definiše "Content-type text/html " onda i izlaz mora da bude formatiran u skladu sa HTML-om, kao što je korišćenje <BR> ili <P> za novi red ili <PRE> da bi smo uklonili automacko formatiranje koje radi HTML.

Dijagnostika i izveštavanje o greškama


Pošto je "stdout" uključen u dokument koji je poslat u dijagnostiku, dijagnostika se prikazuje pomoću "SAY" komande i pojavljuje se u dokumentu. Možete pogledati Fragmente REXX koda da bi ste videli primer izveštaja dijagnostike.

Ukoliko ste naišli na greške, na primer: nema ulaza, nevažeći karakteri, previše navedenih parametra, nevažeća komanda, pogrešna sintaksa ili nedefinisana promenljiva u REXX skripti. Skripta treba da pruži detaljne informacije o tome šta nije uredu u njoj. Takođe može biti veoma korisno da pruži i informacije o podešavanjima raznih WWW Sistemskih promenjljivih koje možemo menjati.

CGIerror, CGIdie i MyURL REXX PROCEDURE u "cgi-lib.rxx" pružaju pomoć pri izveštavanju o greškama. Pored toga pogledajte i fragmente REXX koda upotrebom CGIerror i upotrebom CGIdie kao i tipični CGIerror izlaz i CGIdie izlaz.

Dve jednostavne REXX WWW CGI Scripte


Da bi vaš Web server izvršio CGI skriptu morate: Urednik web strana (Web-master) će se postarati da Bezbednosni aspekti vaše skripte moraju biti provereni pre dodavanja skripte u datoteku sa pravilima.

Ostali izvori informacija



Zahvalnice


Veći deo teksta o opštiem interfejsu za mrežni prolaz i formama je preuzet iz "NCSA" dokumentacije. Korisne informacije i tekstovi su takođe preuzeti sa interneta "The World-Wide Web", Kako serveri funkcionišu (How Servers Work), autora Mark Handley-a i John Crowcroft-a, objavljenom u ConneXions, Februara 1995.
__________________________________________________________________________________________________________________________

Les Cottrell
[ Feedback ]




Published (Last edited): 25-02-2013 , source: http://www-slac.slac.stanford.edu/slac/www/resource/how-to-use/cgi-rexx/cgi.html