Guardarsi attorno
Abbiamo già accennato al fatto che i programmi CGI girano in un
ambiente protetto, dove la loro esecuzione è controllata
dal server web. La parola ambiente è forse usata un po
a sproposito, ma in informatica si parla comunemente di ambiente
di esecuzione riguardo a ciò che il programma sa del mondo
esterno, e come comunica con esso.
A questo proposito, il server web comunica al nostro programma CGI
una notevole quantità di informazioni. La maggior parte di esse
si trovano nelle cosiddette variabili d'ambiente. Potete
immaginarle come una serie di variabili già impostate alla partenza
del vostro programma. In Perl, si trovano nellarray associativo
%ENV. In C, potete usare la funzione getenv(). Vediamo un piccolo
CGI in Perl che ci mostra tutte le variabili dambiente:
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>\n";
foreach (sort keys(%ENV))
{
print "$_: $ENV{$_}<BR>\n";
}
print "</body></html>\n";
Date a questo script il nome che preferite e piazzatelo nella directory
cgi-bin. Quindi aprite il vostro browser e accedete
al seguente indirizzo:
http://localhost/cgi-bin/script.pl
dove script.pl e' il nome che avete dato allo script.
Vedrete una serie di valori simile a questa:
DOCUMENT_ROOT: /opt/HTDOCS
GATEWAY_INTERFACE: CGI/1.1
HTTP_ACCEPT: image/gif, image/jpeg, image/png, */*
Impronte digitali
Ogni parola o frase in maiuscolo è il nome di una variabile dambiente,
la parte dopo i due punti è il valore che le è stato assegnato dal
server. Possiamo già vedere alcune cose interessanti:
HTTP_USER_AGENT: Mozilla/4.72
[en] (X11; U; Linux 2.2.14-5.0 i686)
La variabile HTTP_USER_AGENT dice al programma CGI quale browser
e sistema operativo sta usando lutente che lo ha fatto partire.
Nel mio caso, dice che sto usando Netscape 4.72 con Linux. Nel vostro
caso, sarà probabilmente diverso.
REMOTE_ADDR: 193.206.155.135
Nella variabile REMOTE_ADDR viene messo l'indirizzo IP dell'utente.
Nel vostro caso, è probabilmente 127.0.0.1, oppure un qualche indirizzo
192.168.*
Come vedete, in due righe di programma si possono sapere molte
cose riguardo al computer che ci sta visitando. Spesso queste informazioni
sono molto utili: ad esempio, i webmaster a volte fanno pagine diverse
per IE e per Netscape, viste le notevoli differenze tra i due browser.
Questa riga di programma Perl:
$ie = ($ENV{"HTTP_USER_AGENT"}
=~ m/MSIE/) ? 1 : 0;
esegue un semplice match per cercare la stringa "MSIE"
nelluser agent. Se la trova, suppone che il browser sia Internet
Explorer. Non è un metodo sofisticato, ma funziona abbastanza bene.
Unaltra variabile molto interessante è la HTTP_REFERER. Probabilmente,
voi non la vedete, oppure se la vedete è vuota. Questa variabile
contiene lURL completo della pagina che ha chiamato lo script
(con un link, un form o qualche altro metodo). Per il momento non
contiene niente, perché appunto lo script non è stato chiamato da
unaltra pagina: avete scritto direttamente il suo indirizzo.
Ma in genere non è così, e si possono fare cose interessanti.
Ad esempio, il famoso contatore Shinystat è un CGI che manda in
stdout unimmagine GIF, ed è inserito nel codice della pagina
appunto come unimmagine, in questo modo:
<IMG SRC="http://www.shinystat.it/cgi-bin/shinystat.cgi?USER=pippo">
Per sapere a chi aumentare di uno il contatore, il CGI guarda la
variabile HTTP_REFERER e scopre così in quale pagina era stato inserito.
Non preoccupatevi della parte dopo il punto interrogativo, ci penseremo
tra poco.
Ci sono molte altre variabili, alcune facili da capire, altre meno.
Tenete docchio queste due:
QUERY_STRING:
REQUEST_METHOD: GET
Con ogni probabilità, la vostra QUERY_STRING è vuota, e il REQUEST_METHOD
è vuoto oppure contiene "GET". Mediante queste due variabili
dambiente un programma CGI riceve i dati da un form, quando
viene premuto il tasto Submit. Ma qui sto sconfinando, e ce ne occuperemo
nella prossima lezione.
Torna all'indice Generale del corso di Corso di CGI di Software Planet