Ce Este Cgi
Ce Este Cgi
powered by www.lug.ro
Ce este CGI?
de Adrian Takacs
CGI - prescurtarea de la Common Gateway Interface, este o interfa a serverului
web care-i extinde funcionalitile. Utiliznd CGI se poate comunica cu utilizatorii care
v acceseaz site-ul dvs. Teoretic, CGI v d posibilitatea s extindei capacitatea
serverului de a interpreta informaiile introduse n browser i s afieze n browser
rezultatul acestei prelucrri. n practic, CGI permite programatorului s scrie programe
care comunic cu uurin cu serverul.
n mod normal, dac doreai s extinzi capabilitile serverului trebuia s modifici
nsui serverul. Este o soluie destul de neplcut deoarece necesit cunotinte avansate
de programare TCP/IP i cunotinte ale protocoalelor web. Necesita n plus schimbri n
codul serverului de web sau scrierea unui server de web dedicat pentru fiecare operaie.
De exemplu, dorii s facei un portal web-spre-email adic ceea ce scrie un utilizator n
pagina web s fie trimis la alt utilizator prin email. Atunci ar trebui modificat serverul ca
s prelucreze cererea utilizatorului, s trimit mail-ul i s trimit napoi un rspuns la
browser.
Aceasta presupune s avem access la codul serverului de web ceea ce nu este
ntotdeauna posibil. Mai presupune cunotine tehnice avansate. n al treila rnd, se
poate aplica pentru un singur server. Dac se dorete mutarea pe alt platform trebuie
facut din nou totul.
De ce CGI?
CGI ne d o soluie portabil i simpl la aceste probleme. Protocolul CGI
definete o metod standard pentru ca programele s interacioneze cu serverul. Fr
cunotine de specialitate, se pot scrie programe n orice limbaj de programare dorit care
comunic cu serverul web. i acel program va lucra pe orice server care nelege
protocolul CGI. Comunicaia n CGI este rezolvat prin intrarea i ieirea standard, ceea
ce nseamn c daca tu tii cum s scrii i s citeti date n limbajul de programare
preferat se poate scrie o aplicaie web. n afara interpretrii intrarilor i ieirilor
programarea aplicaiilor CGI este echivalent cu scrierea oricrei alte aplicatii. De
exemplu, daca vrei s facei un program care afieaz "Hello world!" vei utiliza funciile
de tiparire din limbajul preferat i formatul definit pentru programele CGI pentru a afia
mesajul potrivit.
Ce limbaj folosesc?
Deoarece CGI este o interfa comun nu este restricionat utilizarea unui
anumit limbaj. Pentru a fi siguri c limbajul este potrivit pentru CGI el trebuie s poat
face urmtoarele:
9 Tiprire la ieirea standard
9 Citire de la intrarea standard
9 Citire din variabilele de mediu
Aproape toate limbajele de programare i multe din limbajele de scripting pot face
aceasta aa c putei utiliza oricare din ele.
Limbajele pot fi interpretate sau compilate. Un limbaj compilat cum ar fi C sau
C++ tinde s fie mai mic i mai rapid, pe cnd limbajele interpretate cum ar fi perl sau
python trebuie s ncarce un interpretor, care poate fi destul de mare, la nceput. La
limbajele compilate se pot distribui executabile fr codul surs. Iar la limbajele
interpretate distribuirea scriptului este echivalent cu distribuirea codului surs.
powered by www.lug.ro
powered by www.lug.ro
Un exemplu de mic program care afieaza un hello world! este dat mai jos:
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print "<html><body><h1>Hello World!</h1></body></html>";
-Comunicaie server web <- browser web
Comunicaia invers se poate face prin doua metode: GET, POST fiecare din ele trimind
date de la utilizator la server dar fiecare cu particularitile lui. S luam prile comune:
fiecare informaie dintr-un formular este codificat astfel:
Se fac perechi de informaie=valoare, separate ntre ele prin & spaiile se nlocuiesc cu +
i orice alt caracter "ciudat" se nlocuiete cu % i codul hexa de dou cifre.
Am folosit mai sus cteva noiuni pe care nu le-am definit bine. Formular= pagin web n
care se afl un <form> </form> n care se pot introduce date prin intermediul
marcatorilor <input>, <select> s.a. Fiecare formular are un script care se ocup cu
prelucrarea datelor de intrare codificate cum s-a precizat mai sus.
Acum diferenele: n cazul metodei GET informaiile codificate vor aprea n URL-ul
scriptului care prelucreaz informaia, totodat va fi pus n variabila de mediu
QUERY_STRING. Dar aceasta are dezavantajul unei posibiliti de trimitere limitat de
informaie (max 1k) i n plus utilizatorul va vedea datele introduse, ceea ce nu e bine, de
exemplu s vad un url cu parola sau cu seria crii de credit. La POST n schimb datele
se pun la intrarea standard de unde le poate lua programul. Dar de ce dou metode?
deoarece GET are un mare avantaj nu este necesar un formular pentru a-l folosi, se
poate face un link n pagina care cuprinde informaiile dorite i gata.
Baze de date: Ce s aleg?
Da, acum e acum, fiecare are avantaje i dezavantaje dar cel mai important este
c majoritatea respect un standard numit SQL92 care precizeaz modul cum
interacionm cu serverul de baze de date. n perl este un proiect numit DBI (database
interface) care vrea s fie o metod universal de a accesa baza de date alegnd driverul
potrivit. Chiar se poate s lucrm simultan cu mai multe siteme de baze de date.
Exemple de sisteme de baze de date: mysql, postgresql, firebird (acestea sunt free),
Oracle, DB2, MSSQL (pe bani) .a.m.d.. Diferenele constau n performane, necesiti
hardware, funcionalitti, optimizarea anumitor operaii .a.m.d..
-Cum fac s comunice o baz de date cu pagina de web?
Pi prin intermediul scripturilor CGI. Practic se face astfel, se iau datele de la
utilizator se prelucreaz, se salveaz n baza de date iar cnd informaia este cerut
pentru afiare se caut n baza de date i se afieaz.
-Cum s lucrez la o aplicaie mai mare?
Pentru aplicaii mari trebuie atenie mare. Este foarte bine s se impun nite module
care s comunice ntre ele standardizat i fiecare s aib un lucru de fcut pe care
numai el s-l fac: de exemplu un modul care se ocup de autentificare, unul de afiarea
informaiilor altul de legatura cu baza de date .a.m.d..