2.1. Introducere in CGI
CGI (Common Gateway Interface) este un standard pentru rularea programelor externe de pe server-ul web. CGI permite ca pagina returnata sa fie dinamica, spre exemplu, cu ajutorul unui script CGI ati putea accesa informatiile dintr-o baza de date si formeaza rezultatele intr-o pagina HTML. Nesurprinzator, scripturile CGI sunt deosebit de populare si folosite in mediul WWW (World Wide Web). CGI este si un standard de comunicare intre documentele Web si scripturile CGI pe care le scrieti. Un program CGI este doar un program care comunica intr-un mod oarecare cu documentele Web, prin documente Web intelegand orice fel de fisiere utilizate pe Web. Existenta acestui standard permite realizarea unor pagini Web mai dinamice si mai interactive decat s-ar realiza numai cu pagini HTML (chiar daca aceste pagini contin scripturi care folosesc DHTML).
Exista un numar de tutoriale CGI foarte bune disponibile pe Internet. Informatiile de mai jos constituie cateva puncte de reper care trebuiesc tinute minte cand folositi CGI.
Puncte cheie de retinut atunci cand folositi scripturi CGI:
Scripturile pre-instalate disponibile prin CPanel sunt cele mai usor de folosit, dar daca niciunul din ele nu indeplineste ceea ce doriti, aveti libertatea de a cauta altele mai bune prin intermediul Internetului. De obicei se gasesc scripturi care sa poata executa aproape orice, mai ales daca sunteti dispus sa platiti pentru el.
Cititi toata documentatia disponibila pentru un script inainte de a-l folosi. Facand acest lucru va va ajuta sa evitati majoritatea problemelor.
CHMOD ('Change Mode') se refera la schimbarea permisiunilor pentru un fisier (de obicei scriptul in sine). Managerul de fisiere CPanel va permite sa efectuati aceasta operatie in mod rapid, ca si majoritatea soft-urilor FTP, de altfel.
Important - dupa incarcarea scripturilor de tip cgi-bin, schimbati setarea CHMOD pe 755 (exceptand cazul in care documentatia aferenta scriptului specifica alta setare). Spre exemplu, trebuie schimbata setarea CHMOD pe 755 pentru scripturile CGI E-Mail pre-instalate in CPanel, pentru ca acestea sa functioneze corect.
Multe scripturi au nevoie sa stie, de exemplu, calea spre Perl (soft pentru limbaj de scripting) si spre sendmail (soft pentru HTTP mail).
Testati scripturile dumneavoastra in mod repetat inainte de folosire. Testarea scripturilor este esentiala pentru a va asigura de buna lor functionare.
CPanel este un panou de control performant pe baza Web, ce permite administrarea domeniul dumneavoastra printr-o interfata online usor de utilizat. Ideea centrala este de a va transfera cat mai mult control si responsabilitate asupra site-ului dumnevoastra gazduit in mediul Organic.
2.2. Limbaje
Aplicatiile CGI pot fi scrise in orice limbaj care poate fi executat pe calculatorul care este server Web. Alegerea limbajului depinde de tipul aplicatiei. Perl, spre exemplu, este foarte bun pentru manipularea sirurilor si fisierelor, in timp ce C este bun pentru aplicatii mari si complexe. Perl si C sunt probabil cele mai utilizate limbaje pentru programarea CGI. Depinzand de tipul si destinatia aplicatiei, precum si de indemanarea programatorului (in diferitele limbaje). Pentru aplicatiile CGI se pot folosi limbajele:
C
C++
Perl
PHP
Python
Shell scripts (UNIX)
Visual Basic
Applescript</li>
Tcl
Aceste limbaje, precum si multe altele, pun la dispozitia programatorului mijloace de a indeplini, pe de o parte, cerintele cuprinse in specificatiile CGI, iar pe de alta parte usureaza atingerea performantelor maximale ale acestei interfete.
2.3. La ce este utila aceasta interfata ?
In functie de complexitate, aplicatiile CGI se impart in:
Aplicatii simple de genul
contoare de vizitare (de tip text)
programe care genereaza sursa HTML pentru lucruri simple precum scrierea datei
orice script PERL (program C, C++) care are, spre exemplu, mai putin de 50 de linii
sau orice program C de aceeasi complexitate
Aplicatii de complexitate medie cum ar fi:
generarea dinamica a imaginilor
generarea unor intregi pagini HTML
realizarea animatiilor
3. Aplicatii complexe precum:
1. comunicarea cu bazele de date
2. generarea dinamica a mai multor pagini HTML
3. motoare de cautare, etc.
2 .4. Cum se transmit datele din browser scriptului CGI ?
Simplu! Toate datele relavante transmise serverului de catre browser, precum si datele dintr-un formular (la care browserul adauga automat antetele specifice protocolului HTTP), sunt transmise de server catre scriptul CGI fie prin intermediul unor variable de mediu, fie pe calea fisierului standard de intrare STDIN (care este modul implicit prin care un program primeste date).
Scripturi CGI
Cand scriem scripturi CGI, cream de fapt un program care va rula ca un subproces al serverului Web. Trebuie sa gasim o modalitate pentru ca scriptul nostru sa primeasca informatii de la server. Exista cateva metode care sunt folosite pentru a transmite informatiile catre scriptul care ruleaza.
Prima modalitate la care ma gandesc este folosirea parametrilor. De fapt, scripturile CGI nu folosesc parametri asa cum sunt folositi in alte programe, poate pentru ca aceasta modalitate a fost considerata 'prea UNIX', sau pentru ca standardele pentru transmiterea de parametri catre programe sunt prea restrictive.
A doua metoda de a transmite date catre procesul fiu este prin 'variabile de mediu': o serie de perechi de forma nume=valoare sunt mostenite de procesul fiu de la parinte in momentul in care procesul fiu este creat. UNIX foloseste de obicei variabile de mediu pentru a pastra informatiile utile in context global, punandu-le astfel la dispozitia proceselor. Structura nume=valoare a variabilelor de mediu se potriveste foarte bine cu datele care vin din formularul (form) pe care utilizatorul l-a incarcat in navigator. Fiecarui camp de intrare de pe formular poarta un nume si va primi si o valoare furnizata de catre utilizator. Valoarea trebuie sa fie legata de numele campului si perechea sa fie trimisa serverului Web.
In fine, o alta metoda de a trimite date catre procesul fiu este sa scriem informatiile intr-un fisier si sa specificam procesului fiu sa citeasca datele din acesta. Aceasta tehnica este frecvent utilizata in redirectarea de tip shell. De exemplu, comanda:
$ ls-l /bin | more
va determina shell-ul sa lanseze comanda ls si sa redirecteze rezultatul comenzii catre o intrare standard a comenzii more. Comanda more primeste de fapt un descriptor al unui fisier deschis, din care sa citeasca datele.
2.6. Variabile de mediu
Atunci cand un browser apeleaza un script CGI de la server, serverul porneste programul CGI intr-un proces independent. Deoarece, la un moment dat, pe server acelasi script poate rula pentru mai multi utilizatori, serverul transmite fiecarui proces in care este executat scriptul, toata informatia de care acesta are nevoie pentru a deservi clientul pentru care a fost lansat procesul. Cu alte cuvinte, exista o corespondenta univoca client - proces de rulare a scriptului, astfel incat, chiar daca este executat acelasi script, fiecare client va fi deservit conform cererii sale particulare. Deoarece serverul creeaza de fiecare data cate un nou mediu pentru fiecare proces in care este executat scriptul, calea cea mai simpla de transmitere a informatiei server - script se face prin intermediul variabilelor de mediu.
Cateva exemple de variabilele de mediu ale CGI:
AUTH_TYPE - contine metoda de autentificare folosita pentru a accepta cererea browser-ului, daca este folosita vreuna. Un exemplu de metoda de autentificare este schema utilizator/parola. CONTENT_LENGTH - Lungimea continutului furnizat de utilizator in pagina Web care apeleaza scriptul CGI. Deoarece acest continut este transmis scriptului sub forma unui sir (de caractere), aceasta lungime este exprimata in octeti (bytes), cate un byte pentru fiecare caracter.
CONTENT_TYPE - contine tipul fisierului (datei) care insoteste cererea browser-ului catre scriptul CGI. Spre exemplu: text/html,sau image/jpeg.
GATEWAY_INTERFACE - contine versiunea CGI care va fi utilizata. Pentru versiunea 1.1 a specificatiei CGI, aceasta variabila va fi CGI/1.1.
SERVER_PORT - contine numarul portului pe care browserul Web a trimis cererea catre server.
SERVER_PROTOCOL - contine numele si versiunea protocolului utilizat pentru a face apelul scriptului CGI. In majoritatea cazurilor, acesta va fi ceva de genul HTTP/1.0.
SERVER_SOFTWARE - memoreaza numele si versiunea aplicatiei de server web care executa scriptul CGI.
2.7. GET si POST
Exista doua variante de a trimite catre serverul Web informatia culeasa intr-un formular care apeleaza un script CGI: GET si POST. Parametrul METHOD specifica alegerea facuta la implementarea formularului in pagina Web. Fiecare metoda foloseste o cale diferita pentru a trimite informatiile din formular la server, in momentul in care butonul submit (trimite) este apasat.
Denumirile GET si POST se refera la comenzi din protocolul HTTP. Cand navigatorul cere o pagina obisnuita, trimite o cerere de genul:
GET /main.html HTTP/1.1.
Cererea de mai sus ii solicita serverului pagina /main.html si ii indica faptul ca este capabil sa faca fata versiunii 1.1 a protocolului HTTP. Daca totul este ok, atunci serverul va raspunde cu un mesaj care contine datele cerute.
Cand navigatorului i se spune sa trimita datele din formular folosind o cerere de tip GET, acesta va trimite cererea adaugand la sfarsitul URL-ului un semn de intrebare si continutul formularului. Se creeaza un URL, extins continand adresa paginii si parametrii care trebuie trimisi scriptului (de exemplu https://www.domeniu.dom/cgi-bin/script.pl?name=John& tel=1274). Este de dorit sa se limiteze spatiul ocupat de variabilele de mediu. Astfel, pentru formularele mai mari este de preferat metoda POST. In acest caz, datele din formular nu sunt trimise ca parte a URL-ului, ci sub forma unui fisier codat cu standardul MIME inglobat in corpul mesajului trimis catre server.
Standardul MIME, este intrebuintat pentru transmiterea fisierelor si documentelor de toate tipurile, nu numai a celor binare (sunt pastrate date suplimentare despre tipul documentului, iar in functie de aceasta, in momentul decodarii mesajului este lansata aplicatia capabila sa il interpreteze corect).
Exista insa o complicatie atat pentru GET cat si pentru POST. Am amintit ca HTTP este un protocol de tip text si ca folosirea textului pentru a transporta informatii are probleme.
Se intampla des ca intr-o aplicatie de text sa trebuiasca sa 'furam' caractere pentru a le folosi in aplicatia insasi. Ganditi-va la fisierul de parole din UNIX: foloseste caracterul doua puncte (:) pentru a separa diferitele informatii despre utilizator, cum ar fi parola, numele, iar acest lucru inseamna ca nu putem avea un nume de utilizator care sa contina caracterul doua puncte. Se spune ca acesta (caracterul ':') este un caracter 'furat' Pentru a evita acest lucru, protocolul HTTP foloseste o metoda de decodare ca sa asigure faptul ca informatia ramane intacta in urma transmisiei. Pentru a codifica datele folosite in URL-uri, caracterele spatiu sunt inlocuite cu semnul plus (+) si toate celelalte caractere care nu sunt alfanumerice sunt inlocuite cu semnul procent (%) urmat de codul hexazecimal al caracterului
|