Sunteți pe pagina 1din 3

“Conferinţa de Linux – Băile Felix 2002”

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 funcţionalităţile. Utilizând CGI se poate comunica cu utilizatorii care vă accesează site-ul dvs. Teoretic, CGI vă dă posibilitatea să extindeţi capacitatea serverului de a interpreta informaţiile introduse în browser şi să afişeze în browser rezultatul acestei prelucrări. În practică, CGI permite programatorului să scrie programe care comunică cu uşurinţă cu serverul. În mod normal, dacă doreai să extinzi capabilităţile serverului trebuia să modifici însuşi serverul. Este o soluţie destul de neplăcută deoarece necesită cunoştinte avansate de programare TCP/IP şi cunoştinte ale protocoalelor web. Necesita în plus schimbări în codul serverului de web sau scrierea unui server de web dedicat pentru fiecare operaţie. De exemplu, doriţi să faceţi 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 răspuns la browser. Aceasta presupune să avem access la codul serverului de web ceea ce nu este întotdeauna posibil. Mai presupune cunoştinţe tehnice avansate. În al treila rând, se poate aplica pentru un singur server. Dacă se doreşte mutarea pe altă platformă trebuie facut din nou totul.

De ce CGI?

CGI ne dă o soluţie portabilă şi simplă la aceste probleme. Protocolul CGI defineşte o metodă standard pentru ca programele să interacţioneze cu serverul. Fără cunoştinţe 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 înţelege protocolul CGI. Comunicaţia în CGI este rezolvată prin intrarea şi ieşirea standard, ceea ce înseamnă că daca tu ştii cum să scrii şi să citeşti date în limbajul de programare preferat se poate scrie o aplicaţie web. În afara interpretării intrarilor şi ieşirilor programarea aplicaţiilor CGI este echivalentă cu scrierea oricărei alte aplicatii. De exemplu, daca vreţi să faceţi un program care afişează "Hello world!" veţi utiliza funcţiile de tiparire din limbajul preferat şi formatul definit pentru programele CGI pentru a afişa mesajul potrivit.

Ce limbaj folosesc?

Deoarece CGI este o interfaţă comună nu este restricţionată utilizarea unui

anumit limbaj. Pentru a fi siguri că limbajul este potrivit pentru CGI el trebuie să poată face următoarele:

Tipărire la ieşirea standard

Citire de la intrarea standard

Citire din variabilele de mediu

Aproape toate limbajele de programare şi multe din limbajele de scripting pot face aceasta aşa că puteţi 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 când 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 fără codul sursă. Iar la limbajele interpretate distribuirea scriptului este echivalentă cu distribuirea codului sursă.

1

“Conferinţa de Linux – Băile Felix 2002”

powered by www.lug.ro

Înainte de a alege limbajul trebuie să consideraţi priorităţile. Trebuie să gasiţi un echilibru între câştigurile de viteză şi eficienţă programând într-un limbaj sau altul. Dacă vreţi să învataţi un nou limbaj în loc să utilizaţi cel pe care-l ştiţi deja trebuie să cântăriţi cu grijă avantajele şi dezavantajele fiecăruia. Unele dintre cele mai utilizate limbaje pentru CGI sunt C, Perl, Php. Fiecare din ele are avantajele şi dezavantajele lui. Perl este un limbaj de nivel înalt, fiind foarte bun pentru prelucrarea informaţiilor sub forma de text. Deşi este foarte uşor de utilizat, flexibil, îl face atractiv pentru programarea CGI, mărimea relativ mare şi viteza scazută îl face neutilizabil în anumite aplicaţii. Programele C sunt mai mici, mai eficiente, oferă mai multe posibilităţi de control al sistemului la nivel scazut, dar mult mai dificil de programat, nu are rutine uşor de folosit pentru lucru cu şirurile şi e mult mai greu de depanat. Php este o mixtură care ia ce-i bun de la fiecare şi este optimizat pentru web dar se poate folosi numai cu un server de web, el nu are un interpretor de sine stătător. Care limbaj este mai bun pentru programare CGI? Care vă este mai la îndemână. Fiecare este eficient la programarea web cu librăriile potrivite, care au aceleaşi capabilităţi.

Nişte observaţii.

Au apărut deja multe alternative la aplicaţiile CGI. Multe servere deja au definite interfeţe de programare care fac mai uşoară scrierea de extensii fără a fi nevoie de aplicaţii CGI independente. Programele făcute astfel tind să fie mai eficiente decât programele CGI. Se implementează chiar sisteme standard cum ar fi serverele de aplicaţii care lucreaza cu ASP, JSP, sevlet-uri, sau java entreprise. Întrebarea este cu toate schimbările astea va fi nevoie să învăţăm altceva? Aici apare mai mult problema modului în care vom dezvolta software-ul pt web. În general interfeţele de programare (API-uri) au problema portabilităţii reduse, cele standard în schimb sunt mai lente şi mănâncă resurse. În general sunt folosite în aplicaţii mari care sunt utilizate intern de intreprinderi, corporaţii şi nu pentru site-uri publice. Cu aceste observaţii putem vedea că CGI-ul datorită raspândirii lui şi faptului că se poate scrie în orice limbaj este util mai ales acelora care doresc să dezvolte rapid fără să părăsească limbajele cunoscute.

Cum pot şi eu face asta?

Instalare.

Pentru instalarea cât mai facilă luaţi distribuţia Linux preferată şi să fiti atenţi să instalaţi urmatoarele:

Serverul de web apache, perl (în cazul lucrului în perl) un editor de text şi gata. Acum daca aţi ales apache-ul, trebuie să mai faceţi nişte mici configurări mai ales dacă doriţi să fie mai multe site-uri pe acelaşi server fiecare cu directoarele de scripturi independente. Dar esenţa este ca directorul în care se află scripturile (de obicei cgi-bin) să fie notat într-o opţiune ScriptAlias (directorul implicit cgi-bin cu care vine apache are această setare).

-Comunicaţie server web -> browser web

Am tot pomenit de ieşire standard intrare standard dar aici voi preciza câteva din lucrurile de bază ca o pagina să fie corect afişată. Dacă vrem să trimitem o pagină la browser este obligatoriu în primul rând să îi spunem la început ce îi trimitem căci un browser interpretează altfel un text simplu sau o pagină html. Pentru aceasta i se trimite tipul paginii într-un mod standard (MIME) unde este precizat tipul şi subtipul documentului, de exemplu: text/plain, text/html, image/jpeg ş.a.m.d.

2

“Conferinţa de Linux – Băile Felix 2002”

powered by www.lug.ro

Un exemplu de mic program care afişeaza 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>";

-Comunicaţie server web <- browser web

Comunicaţia inversă se poate face prin doua metode: GET, POST fiecare din ele trimiţând date de la utilizator la server dar fiecare cu particularităţile lui. Să luam părţile comune:

fiecare informaţie dintr-un formular este codificată astfel:

Se fac perechi de informaţie=valoare, separate între ele prin & spaţiile se înlocuiesc cu + şi orice alt caracter "ciudat" se înlocuieşte cu % şi codul hexa de două cifre. Am folosit mai sus câteva noţiuni 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 diferenţele: în cazul metodei GET informaţiile codificate vor apărea în URL-ul scriptului care prelucrează informaţia, totodată va fi pus în variabila de mediu QUERY_STRING. Dar aceasta are dezavantajul unei posibilităţi de trimitere limitată de informaţie (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 cărţii 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 informaţiile 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 interacţionăm 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 alegând driverul potrivit. Chiar se poate să lucrăm 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

hardware, funcţionalităti, optimizarea anumitor operaţii ş.a.m.d

Diferenţele constau în performanţe, necesităţi

-Cum fac să comunice o bază de date cu pagina de web?

Păi prin intermediul scripturilor CGI. Practic se face astfel, se iau datele de la utilizator se prelucrează, se salvează în baza de date iar când informaţia este cerută pentru afişare se caută în baza de date şi se afişează.

-Cum să lucrez la o aplicaţie mai mare?

Pentru aplicaţii mari trebuie atenţie mare. Este foarte bine să se impună nişte module care să comunice între ele standardizat şi fiecare să aibă un lucru de făcut pe care numai el să-l facă: de exemplu un modul care se ocupă de autentificare, unul de afişarea informaţiilor altul de legatura cu baza de date ş.a.m.d

3