Sunteți pe pagina 1din 51

CGI

Common Gateway Interface


Noţiuni de bază
• CGI este un standard de comunicare intre
documentele Web si scripturile CGI pe
care le scrieti.
• Un script/program CGI este un program
care comunica intr-un mod oarecare cu
documentele Web.
• Existenta acestui standard permite
realizarea unor pagini Web interactive.
Schema generala de interacţiune
între browser şi server prin CGI

CGI

interogare
Browser
web
raspuns
page
Server
Interogare:
http://perl.hotmail.ru/page.html
Răspuns:
HTTP/1.0 200 OK
Date: Tue, 04 Apr 1999 12:27:49 GMT
Server: Apache/1.3.7 Meta - date
Content-type: text/html
Content-length: 100
Last-modified: Thu, 04 Apr 1999 12:23:51 GMT
<html>
<head>
<title>Perl в примерах</title>
</head> Conținut
<body> propriu - zis
<h2>Perl в примерах</h2>
. . . . . . .. . . .. . . .. .. . .. .
</body>
</html>
META-DATE

HTTP/1.0 200 OK
Date: Tue, 04 Apr 1999 12:27:49 GMT
Server: Apache/1.3.7
Content-type: text/html
Content-length: 100
Last-modified: Thu, 04 Apr 1999 12:23:51 GMT

ș. a.
META-DATE

HTTP/1.0 COD

COD
200 OK
204 No Content
301 Moved Permanently (to Location)
302 Moved Temporarily (to Location)
401 Unauthorized
404 Not found
500 Internal server error
META-DATE

Date: Tue, 04 Apr 1999 12:27:49 GMT


Server: Apache/1.3.7
META-DATE
MIME (Multimedia Internet Mail Extension)

Content-type:
text/plain
text/html
text/css
text/richtext
image/jpeg
image/x-xbitmap
audio/basic
ulaw-compressed audio/x-wav
video/quicktime
video/x-msvideo (avi-files)
application/javascript
META-DATE

Content-length: 100
Last-modified: Thu, 04 Apr 1999 12:23:51 GMT
Schema generala de interacţiune
între browser şi server prin CGI

CGI scripts
Browser
CGI web
interogare
page
Server raspuns
FORM
Utilizarea
• Contoare de vizitare;
• programe care genereaza sursa HTML
pentru lucruri simple precum scrierea
datei;
• generarea dinamica a imaginilor;
• generarea unor intregi pagini HTML;
• realizarea animaţiilor;
• prelucrarea datelor întroduse de utilizator
în formulare.
Limbaje
    Aplicatiile CGI pot fi scrise in orice limbaj care poate fi
executat calculatorul care este server Web. Alegerea
limbajului depinde de tipul aplicatiei. Depinzand de tipul
si destinatia aplicatiei, precum si de indemanarea
programatorului (in diferitele limbaje), pentru aplicatiile
CGI se pot folosi limbajele:
• C
• C++
• Perl
• Python
• Shell scripts (UNIX)
• Visual Basic
• PHP
• ş. a.
Exemplu de un script scurt ce generează un
număr aleatoriu
#!/usr/local/miniperl/miniperl

print("Content-Type: text/html\n\n");
print("<HEAD><TITLE>Random Number Page</TITLE></HEAD>\n");
print("<BODY>\n");

srand;
$number = rand(100);
$number = substr($number,0,2);

print "<H3>The random number is <B>", $number, "</B></H3>";


print "<HR>";
print "<A href=\x22/cgi/random.cgi\x22>";
print "<B>Get another Random number</A>\n";
print "<HR>";
print("</BODY>");
print("</HTML>");
Rezultat

http://test1.ru/cgi/random.cgi/

The random number is 19


Get another Random number
Exemplu de un script scurt ce alege o
imagină în mod aleatoriu

<body>
<h2>Exemplu de CGI script incadrat in pagina web</h2>

<img src="cgi-bin/random_img.pl">

<p> Desenul a fost selectat in mod aleatoriu</p>


</body>
Exemplu de un script scurt ce alege o
imagină în mod aleatoriu

<body>
<h2>Exemplu de CGI script
incadrat in pagina web</h2> random_img.pl

<img #!/usr/local/miniperl/miniperl
src="cgi-bin/random_img.pl"> @pic=('c0.png','c1.png','c2.png','c3.png');
srand;
<p> Desenul a fost selectat in mod $id=int(rand(4));
aleatoriu</p> $png='images/'.$pic[$id];
</body> print "Content-Type: image/png\n\n";
open G,$png;
binmode( G );
binmode( STDOUT );
print <G>;
close G;
exit;
Exemplu de document cu un script scurt ce
memorizează data, ora şi adresa accesului
la pagina dată
example1.html get_ip.cgi

$data="ipdata.txt";
<html>
open(D,">>$data");
<head> print D scalar localtime,' '.
<title>Test CGI</title> $ENV{'REMOTE_ADDR'}."\n";
</head> close(D);
<body>
$gif="524516516.gif";
<center><h3>Exemplu de pagina cu print "Content-Type: image/gif\n\n";
CGI script</h3> open(G,$gif);
<IMG print <G>;
src="http://test1.ru/cgi/get_ip.cg close(G);
i" height="1" width="1">
</body>
</html>
Exemplu de document cu un script scurt ce
memorizează data, ora şi adresa accesului
la pagina dată

Rezultat: ipdata.txt

Mon Oct 24 19:08:38 2011 127.0.0.1


Mon Oct 24 19:11:14 2011 127.0.0.1
Mon Oct 24 19:14:04 2011 127.0.0.1
Mon Oct 24 19:59:15 2011 127.0.0.1
Mon Oct 24 19:59:46 2011 127.0.0.1
Mon Oct 24 20:03:28 2011 127.0.0.1
Mon Oct 24 20:06:29 2011 127.0.0.1
Mon Oct 24 20:08:01 2011 127.0.0.1
Mon Oct 24 20:22:53 2011 127.0.0.1
Mon Oct 24 20:37:50 2011 127.0.0.1
Schema generala de interacţiune
între browser şi server prin CGI

CGI scripts
CGI
Browser
interogare web
page
Server raspuns

FORM
BD
BD
BD
Formular – tag form

<form atribute >


Elemente interne
</form>
Atributele tag-ului form
• action - URL programului ce va prelucra
datele întroduse de utilizator în formular;

• Exemple:
action="http://localhost/cgi-bin/primer.cgi"
action="http://test1.ru/cgi/otsenka.pl
action=“search1.php”
action="form_action.asp"
Atributele tag-ului form
• method - metoda prin care datele
întroduse de utilizator în formular vor fi
transferate serverului;

• Exemple:
method="get"
method=“post"
Metoda GET
• Transmite datele întroduse prin variabila
QUERY_STRING
• Se utilizează pentru transmiterea
informaţiei comparativ scurte
• Nu se utilizează pentru transmiterea
informaţiei importante (de exemplu,
parole)
• Informaţia ce se transmite este vizibilă în
bara de adrese a browserului
Metoda POST
• Transmite datele întroduse prin standard
input STDIN
• Se utilizează pentru transmiterea
informaţiei voluminoase
• Necesită cunoaşterea lungimii datelor
întroduse stocate în variabila
CONTENT_LENGTH
Atributele tag-ului form
• enctype – defineşte metoda de codificare a
datelor transmise. Valorile posibile:
• application/x-www-form-urlencoded – toate
caracterele sunt codificate înainte de transmitere
(default)
• multipart/form-data – Nimic nu se codifică (pentru
file upload)
• text/plain – Spaţii se înlocuiesc cu "+", alte
caractere nu se codifică
Exemplu de formular simplu
<html>
<head> <title>Test Form</title> </head>
<body>
<form action="demo_post_enctype.asp"
method="post" enctype="multipart/form-data">
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  <input type="submit" value="Submit">
</form>
</body>
</html>
Exemplu de formular simplu
<html>
<head> <title>Test Form</title> </head>
<body>
<form action="demo_post_enctype.asp"
method="post" enctype="multipart/form-data">
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  <input type="submit" value="Submit">
</form>
</body>
</html>
Exemplu de formular simplu
<html>
<head> <title>Test Form</title> </head>
<body>
<form action="demo_post_enctype.asp"
method="post" enctype="multipart/form-data">
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  <input type="submit" value="Submit">
</form>
</body>
</html>
Exemplu de formular simplu
<html>
<head> <title>Test Form</title> </head>
<body>
<form action="demo_post_enctype.asp"
method="post" enctype="multipart/form-data">
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  <input type="submit" value="Submit">
</form>
</body>
</html>
Exemplu de formular simplu
<html>
<head>
<title>Test Form</title>
</head>

<body>
<form method=“post" action="http://test/cgi/testform.cgi">
<b>Enter your name: </b>
<input name="user_name" value="" size=20>
<input type="submit" value="Submit">
</form>
</body>
</html>
testform.cgi
#!/usr/local/miniperl/miniperl # Send a message back to the user
print "Content-Type: text/html\n\n";
# checking the REQUEST_METHOD
print "<h3>Multumesc mult ";
if($ENV{'REQUEST_METHOD'} eq @pairs = split(/&/, $buffer);
'GET') foreach $pair (@pairs)
{ # metoda GET sau POST {
$buffer=$ENV{'QUERY_STRING'}; ($name, $value) = split(/=/, $pair);
} $value =~ tr/+/ /;
elsif($ENV{'REQUEST_METHOD'} eq $input{$name} = $value;
'POST') }
{ sysread(STDIN,$buffer, print " $input{'user_name'} ";
$ENV{'CONTENT_LENGTH'}); print " ca ai vizitat pagina mea!
} </h3>\n ";
print "Imi pare bine!";
Rezultat
Formular: http://test1.ru/form_example1.html

Script executat: http://test1.ru/cgi/testform.cgi?user_name=Vasile

Multumesc mult Vasile ca ai vizitat pagina mea!


Imi pare bine!
Cum se transmit datele din
browser scriptului CGI
Toate datele transmise serverului de
catre browser, precum 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).
Procesul de rulare a programului
•  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.
Variabilele de mediu

• 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.
• In mod evident sunt multe variabile disponibile
unui script CGI. Utilizarea unora sau altora se
face in functie de cerintele aplicatiei concrete.
Variabilele de mediu ale CGI
Variabila Semnificatie
AUTH_TYPE Metoda de autentificare folosita
pentru a accepta cererea
browserului, daca este folosita vre
una. Un exemplu de metoda de
autentificare este schema
utilizator/parola.
GATEWAY_INTERFACE Versiunea CGI care va fi utilizata.
Pentru versiunea 1.1 a
specificatiei CGI, aceasta variabila
va fi CGI/1.1
PATH_INFO Informatii suplimentare privind o
cale (path) necesara scriptului
CGI. Aceasta informatie este
plasata dupa un slash la URL-ului
care apeleaza scriptul CGI.
Variabilele de mediu ale CGI
Variabila Semnificatie
CONTENT_TYPE Tipul fisierului (datei) care
insoteste cererea browserului
catre scriptul CGI. Spre exemplu:
text/html,sau image/jpeg.
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.
REMOTE_ADDR Adresa IP a masinii pe care
ruleaza aplicatia browser care a
apelat scriptul CGI.
Variabilele de mediu ale CGI
Variabila Semnificatie
REQUEST_METHOD Metoda folosita la apelarea
scriptului CGI. Aceasta poate
contina una dintre metodele de
apelare valide pentru HTTP
precum: GET, HEAD, POST, PUT
DELETE.
SCRIPT_NAME Calea virtuala si numele scriptului
CGI care este executat. Aceasta
este folosita drept URL pentru
autoreferire.
SERVER_NAME Numele domeniului si adresa IP a
masinii pe care ruleaza aplicatia
de server Web.
Variabilele de mediu ale CGI

Variabila Semnificatie
SERVER_PORT Numarul portului pe care
browserul Web a trimis cererea
catre server.

SERVER_PROTOCOL 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 N umele si versiunea aplicatiei de
server Web care executa scriptul
CGI.
Exemple:
• http://localhost/cgi-bin/random_1.pl
• http://test1.ru/example_1.html/
• http://localhost/example_variabile.html
• http://test1.ru/notele.html
• http://test1.ru/cgi-perl.html
• http://test1.ru/cgi-perl_get.html
Exemple:
<h3> Exemplu de formular</h3>
<form name="myform" action="prelucrarea.php" method="get">
<p> <input id="ex1" name="exemplu1" type="text" value="Camp de
editare" size="25" maxlength="30"/> &nbsp;&nbsp;&nbsp;
</p>
<p> <input name="exemplu2" id="ex2" type="password" value="Parola"
size="15" maxlength="15"/></p>
<p> <textarea cols="50" rows="8" name="exemplu12" id="ex12">Ceva
text</textarea></p>
<p> <input type="submit" name="exemplu10" id="ex10"
value="Trimite">&nbsp; </p>
</form>
Exemple:
Exemple:

http://localhost/prelucrarea.php?exemplu1=Numele&exemplu2=Parola&exemplu12=Ceva+text&exemplu10=Trimite
http://localhost/prelucrarea.php?
exemplu1=Numele&exemplu2=Parola&exemplu12=Ceva+t
ext&exemplu10=Trimite
<?php
<form name="myform"
action="prelucrarea.php" method="get"> $a=$_GET["exemplu1"];
<p> <input id="ex1" name="exemplu1" $f="<p>In primul cimp s-a
type="text" value="Camp de editare" introdus $a</p>\n";
size="25" maxlength="30"/> $b=$_GET["exemplu2"];
&nbsp;&nbsp;&nbsp; $f=$f."<p>Intr-a doilea
</p> cimp s-a introdus
<p> <input name="exemplu2" id="ex2" $b</p>\n";
type="password" value="Parola" size="15" $c=$_GET["exemplu12"];
maxlength="15"/></p> $f=$f."<p>Intr-a treilea
<p> <textarea cols="50" rows="8" cimp s-a introdus
name="exemplu12" id="ex12">Ceva $c</p>\n";
text</textarea></p> echo $f
<p> <input type="submit" name="exemplu10" ?>
id="ex10" value="Trimite">&nbsp; </p>
</form>
http://localhost/prelucrarea.php

<?php
<form name="myform"
action="prelucrarea.php" method=“post"> $a=$_POST["exemplu1"];
<p> <input id="ex1" name="exemplu1" $f="<p>In primul cimp s-a
type="text" value="Camp de editare" introdus $a</p>\n";
size="25" maxlength="30"/> $b=$_ POST["exemplu2"];
&nbsp;&nbsp;&nbsp; $f=$f."<p>Intr-a doilea
</p> cimp s-a introdus
<p> <input name="exemplu2" id="ex2" $b</p>\n";
type="password" value="Parola" size="15" $c=$_
maxlength="15"/></p> POST["exemplu12"];
<p> <textarea cols="50" rows="8" $f=$f."<p>Intr-a treilea
name="exemplu12" id="ex12">Ceva cimp s-a introdus
text</textarea></p> $c</p>\n";
<p> <input type="submit" name="exemplu10" echo $f
id="ex10" value="Trimite">&nbsp; </p> ?>
</form>
<form name="myform" action="prelucrarea.php" method="get">
<p>Întroduceţi vîrsta:<br/>
<input type="radio" name="raspuns" id="raspuns1" value="15"
checked="checked">sub 15 ani<br/>
<input type="radio" name="raspuns" value="15-20" id="raspuns2">15-20
ani<br/>
<input type="radio" name="raspuns" value="20-25" id="raspuns3">20-25
ani<br/>
<input type="radio" name="raspuns" value="25-35" id="raspuns4">25-35
ani<br/>
<input type="radio" name="raspuns" value="35-45" id="raspuns5">35-45
ani<br/>
<input type="radio" name="raspuns" value="45" id="raspuns6">peste 45
ani<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p> <p> <input type="submit" name="exemplu10" id="ex10"
value="Trimite">&nbsp; </p>
</form>
<form name="myform" action="prelucrarea.php" method="get">
<p> <input type="hidden" name="exemplu14" id="ex14"
value=“sondaj_vacanta"> </p>
<p>Unde vă petreceţi concediul de obicei?<br/>
<input type="checkbox" name="optiunea1" id="opt1" value="Mare">La
mare<br/>
<input type="checkbox" name="optiunea2" id="opt2" value="Munte">La
munte<br/>
<input type="checkbox" name="optiunea3" id="opt3" value="Strainatate">în
străinătate<br/>
<input type="checkbox" name="optiunea4" id="opt4" value="Tara">La
&#355;ar&#259<br/>
<input type="checkbox" name="optiunea5" id="opt5"
value="Acasa">Acas&#259<br/>
</p>
<p> <input type="submit" name="exemplu10" id="ex10" value="Trimite"></p>
</form>
//get parameters from URL
if(isset($_GET['exemplu14'])) {
$f=$f."Sondaj vacanța: ";
if(isset($_GET['optiunea1'])) {
$a="<p> A fost selectată opțiunea ".$_GET['optiunea1']."</p>\n";
$f = $f.$a;
}
if(isset($_GET['optiunea2'])) {
$a="<p> A fost selectată opțiunea ".$_GET['optiunea2']."</p>\n";
$f = $f.$a;
}
if(isset($_GET['optiunea3'])) {
$a="<p> A fost selectată opțiunea ".$_GET['optiunea3']."</p>\n";
$f = $f.$a;
}
<form name="myform" action="prelucrarea4.php" method="get">
<p>Alege un judet din România:<br/>
<select name="exemplu_select" id="ex_select">
<option value="Alba">Alba</option>
<option value="Arad">Arad</option>
<option value="Bucuresti" selected="selected">Bucureşti</option>
<option value="Buzau">Buzău</option>
<option value="Cluj">Cluj</option>
<option value="Vrancea">Vrancea</option>
</select>
</p>
<p> <input type="submit" name="exemplu10" id="ex10"
value="Trimite"></p>
</form>
<?php
$f="<html><head><meta charset='utf-8'></head><body>";
//get parameters from URL
$f=$f."<p>Județul: ";
$a=$_GET['exemplu_select']."</p>\n";
$f = $f.$a;
$f=$f."</body></html>";
echo $f
?>

S-ar putea să vă placă și