ioProgrammo N°8, Ottobre 1997 ©Copyright DIEMME Editori
<HTML> <HEAD> <TITLE>Menu di Link</TITLE> </HEAD> <BODY bgcolor="#000080"> </BODY> </HTML> |
<HTML> <HEAD> <TITLE>Menu di Link</TITLE> </HEAD> <BODY bgcolor="#c0c0c0"> <CENTER> <FORM METHOD="POST" ACTION="http://localhost/cgi-bin/menu.cgi" target=central> <SELECT NAME="link"> <OPTION SELECTED>Link 1 <OPTION>Link 2 <OPTION>Link 3 <OPTION>Link 4 <OPTION>Link 5 </SELECT> <INPUT TYPE="submit" NAME="" VALUE="OK"> </FORM> </CENTER> </BODY> </HTML> |
<HTML> <HEAD> <TITLE>Menu di Link</TITLE> </HEAD> <BODY bgcolor="#ffffff"> </BODY> </HTML> |
Descrizione link;url Link 1;http://localhost/link1.html Link 2;../link2.html |
Ogni riga sarà un record, costituito a sua volta da due campi separati da un puto e virgola ;.
Nel capo 1 ci sarà la descrizione del link, uguale a quella del tag SELECT nel frame del menu; mentre nel campo 2 scriveremo l'URL assoluto o relativo.
Salviamo il file link.db nella directory dei cgi del server http ed assicuriamoci che i diritti di lettura siano attivi con chmod 644 link.db.
A questo punto scriviamo il codice perl.
#!/usr/bin/perl
require "cgi-lib.pl";
$menudb = "./link.db";
&ReadParse(*CGI);
&CercaLink($menudb, $CGI{link});
sub CercaLink {
local ($db, $cgi) = @_;
open (DB, "<$db");
while (<DB>) {
@campo = split(/;/, $_);
if ($campo[0] =~ /$cgi/i) {
close(DB);
last;
}
}
print "Location: $campo[1]\n\n";
exit;
}
|
AddType text/x-server-parsed-html .shtmlTale istruzione è note anche come direttiva di Server Side Includes, e fornisce un metodo per poter eseguire "al volo" programmi da un documento html. L'esecuzione dello script counter.cgi si può quindi ottenere con la seguente istruzione nel file index.shtml.
<!--#exec cgi="cgi-bin/counter.cgi"-->
#!/usr/bin/perl
open (COUNT, "+<./counter/counter.log") || die "cannot open counter.log";
flock(COUNT, 2) || die "cannot lock counter.log";
$count = <COUNT>;
if ($count =~ /\n$/) {
chop $count;
}
@numero = split(//, $count);
@img = `ls ./counter/*.gif`;
if (@img) {
print "Content-type: text/html\n\n";
$num = length($count);
$i=0;
while ($i <= $num-1) {
print "<img src=$numero[$i].gif>";
$i++;
}
}
else {
print "Content-type: text/plain\n\n";
print "Benvenuto, sei il visitatore $count\n";
}
$count++;
seek(COUNT, 0, 0);
print COUNT "$count";
close(COUNT);
|
Lo script è abbastanza semplice. Per comodità la directory del file di log (counter.log) e delle immagini per il contatore (0.gif, 1.gif, etc.) è una sottodirectory della cgi-bin (quella in cui sono contenuti i CGI del server). Il file di log, inoltre, non deve essere protetto in scrittura consentendo a chi si connette alla nostra home page di aggiornare il contatore.
Il file counter.log deve esistere. Basta editarlo, scrivere il numero 1 (per i più furbi va bene anche 1000) e salvarlo.
![]()
Data creazione HTML: Febbraio 1998
Autore: Francesco Munaretto
E-mail: NoSpam@thank.you