|
Ogni
pagina quando viene chiamata contiene un "ambiente di
esecuzione" che sono previste per essere comunicate agli script
CGI. Non sarebbe di nostro interesse questo fatto se non fosse che
possono essere utilizzate anche dai comandi SSI. Per vedere tutte le
variabili disponibili è possibile utilizzare il comando:
<!--#printenv -->
Questo
comando produce un output come quello mostrato in figura 1.
Tra le varie informazioni disponibili è possibile notare
REQUEST_URI, che indica il documento richiesto senza il
nome del sito, o la QUERY_STRING, che è la stringa
utilizzata per specificare i parametri opzionali di una pagina. Per
intenderci, in una richiesta come:
http://www.ditta.it/file.htm?a=1&b=2
DOCUMENT_ROOT=/home/httpd/html
HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
HTTP_ACCEPT_CHARSET=iso-8859-1,*,utf-8
HTTP_ACCEPT_ENCODING=gzip
HTTP_ACCEPT_LANGUAGE=en
HTTP_CONNECTION=Keep-Alive
HTTP_HOST=127.1
HTTP_REFERER=http://127.1/ssi/config.shtml
HTTP_USER_AGENT=Mozilla/4.61 [en] (X11; I; Linux 2.2.5-15 i586; Nav)
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
REMOTE_ADDR=127.0.0.1
REMOTE_PORT=1075
SCRIPT_FILENAME=/home/httpd/html/ssi/printenv.shtml
SERVER_ADDR=127.0.0.1
SERVER_ADMIN=root@localhost
SERVER_NAME=212.131.172.189
SERVER_PORT=80
SERVER_SIGNATURE=
SERVER_SOFTWARE=Apache/1.3.9 (Unix) (Red Hat/Linux) ApacheJServ/1.0 PHP/4.0b3
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.0
REQUEST_METHOD=GET
QUERY_STRING=
REQUEST_URI=/ssi/printenv.shtml
SCRIPT_NAME=/ssi/printenv.shtml
DATE_LOCAL=Wednesday, 16-Feb-2000 21:27:44 CET
DATE_GMT=Wednesday, 16-Feb-2000 20:27:44 GMT
LAST_MODIFIED=Tuesday, 15-Feb-2000 21:35:37 CET
DOCUMENT_URI=/ssi/printenv.shtml
DOCUMENT_PATH_INFO=
USER_NAME=msciab
DOCUMENT_NAME=printenv.shtml
Figura 1
la
query string è a=1&b=2, cioè la parte
dell'URL che segue il punto interrogativo, e che solitamente viene
generata automaticamente dalle form per il passaggio dell'input
dell'utente.
Utilizzando
queste variabili con i comandi di controllo che vedremo nel prossimo
paragrafo è possibile ottenere utili effetti, come pagine che
vengono visualizzate in maniera diversa a seconda dei parametri,
senza che si debba ricorrere alla programmazione di CGI. In ogni caso
una variabile può essere semplicemente stampata con il comando
SSI
Benvenuto, <!--#echo var="REMOTE_ADDR" -->
Col
comando comando precedente è possibile visualizzare all'utente
il suo indirizzo IP. In generale è possibile inserire
particolari impostazioni nei file di configurazione di Apache per
fare si che vengano impostate determinate variabili al seconda di
varie condizioni. Ci sono delle direttive come BrowserMatch o
SetEnvIf, che permettono di fare in modo che certe variabili
vengano impostate per esempio per indicare il browser (Netscape o
Explorer) o altre condizioni anche più complesse. Per un sito
che usa il Dynamic HTML generato in due modalità questo può
essere molto utile.
Prima
di entrare nei dettagli relativi alle pagine condizionali, ricordiamo
due comandi che permettono di stampare la dimensione di un file e la
data di ultima modifica. Questi SSI possono essere utili quando si
voglia inserire in automatico informazioni come la data di ultima
modifica di una pagina o la dimensione di un file. Queste
informazioni si ottengono con
<!--#flastmod virtual="file.shtml" -->
<!--#fsize virtual="file.shtml" -->
Anche in questo caso si può usare file al posto di
virtual per specificare un path fisico di un file. L'output
dei due comandi precedenti, come pure le variabili DATE_LOCAL che
contiene l'ora corrente può essere modificato utilizzando il
comando SSI config. A titolo di esempio consideriamo il
seguente listato:
<!--#config timefmt="%d/%m/%Y %H:%M:%S" sizefmt="bytes" -->
Data: <!--#echo var="DATE_LOCAL" --> (GMT: <!--#echo var="DATE_GMT" -->)<br>
Query: <tt><!--#echo var="QUERY_STRING" --></tt><br>
Request: <tt><!--#echo var="REQUEST_URI" --></tt><br>
Dimensione: <!--#fsize virtual="config.shtml" --><br>
Ultima modifica <!--#flastmod virtual="config.shtml" --><br>
Il risultato è mostrato in figura 2. Il
significato di timefmt può essere visto con il comando
Unix man strfmt, mentre sizefmt può essere bytes
(per visaluzzare la dimensione esatta in byte dei file) o abbrev
(per visualizzarla abbreviata, come 1k o 2M)

|