Gestire gli Upload mediante form
Per creare un efficiente sistema di upload in CGI è sufficiente un form e qualche riga di codice, in questo articolo sfrutteremo le potenzialità del linguaggio Perl al fine di mettere a disposizione dell'utente un modulo con il quale inviare verso una cartella remota foto o immagini.
La prima cosa da fare è scrivere il codice necessario per presentare agli utilizzatori un form con cui effettuare il caricamento dei file:
<html> <head> <title>Form mail in CGI</title> </head> <body> <form action="http://www.sito.it/cgi-bin/img.cgi" method="post" enctype="multipart/form-data"> Esegui l'aupload dell'immagine che desideri inviarci: <input type="file" name="immagine"> <input type="submit" name="submit" value="Invia"> </form> </body> </html>Salviamo pure il codice appena proposto in un file '.html', che potremo chiamare come preferiamo, e passiamo al sorgente della nostra piccola applicazione creata con lo scopo di processare i dati inviati dall'utente tramite modulo:
#!/usr/bin/perl
use CGI;
$directory_img="/var/www/html/images";
$upload=newCGI;
$nome_file=$upload->param("immagine");
$nome_file=~s/.*[\/\\](.*)/$1/;
$upload_file=$upload->upload("immagine");
open UPLOADFILE,">$directory_img/$nome_file";
binmode UPLOADFILE;
while ( <$upload_file> )
{
print UPLOADFILE;
}
close UPLOADFILE;
print $upload->header();
print <<END_HTML;
<html>
<head>
<title>Immaginericevuta</title>
</head>
<body>
Eccol'immaginechecihaiinviao:<br/>
<imgsrc="/images/$nome_file"border="0">
</body>
</html>
END_HTML
Niente di particolarmente complesso! Innanzitutto abbiamo indicato il percorso di sistema che porta alla directory in cui dovrenno essere uploddati i file, nel nostro caso la cartella 'images' presente nel percorso '/var/ww/html'.
In secondo luogo abbiamo eseguto un controllo tramite espressioni regolari sul parametro di input, eliminando così tutti quegli elementi che non sono il semplice nome del file completo di estensione.
Siamo poi passati alla fase di upload sfruttando il metodo UPLOADFILE, da notare come venga specificato al metodo il mode per la scrittura del file; la funzione binarimode ci serve infatti per evitare che il file sia scritto in modalità testo ed eventualmente corrotto in occasione di passaggi tra diversi file system.
Infine, viene stampato del semplice codice HTML per creare una pagina contenente l'output dell'immagine uploddata.
Da non dimenticare che se, come nel caso del nostro esempio, stiamo lavorando in ambienti Unix o Unixlike come Linux, sarà opportuno settare i permessi di esecuzione sul file contenente lo script:
chmod a+rx img.cgiOppure
chmod 755 img.cgi







