Newsgroup: it.comp.lang.perl
Titolo: Upload, qualcuno usa Virtualave?

Avrei bisogno di uno script per uploadare file su 
virtualave.net
 qualcuno di
voi lo usa? Ho provato a scriverne uno da un manuale, ma non funziona. Io
avrei bisogno di una cosa tipo Net:FTP, che nello script venga richiesto il
nome dell'host, la mia login e la password. E poi dovrebbe uploadarmi i file
in una directory specifica. Esiste qualcosa del genere?
Grazie a tutti
Riccardo


use Net::FTP;
$ftp = Net::FTP->new("
ftp.tuo_ftp.net
", Timeout=>30);
$ftp->login("tuo_user", "tua_pwd");
$ftp->put("/home/gecco/cam.html", "cam.html");
$ftp->quit;
io uso questo per uppare il file cam.html che c'e' sul mio hd
penso che funzioni pure il glob di piu' file
bau

Grazie Gecco, lo copio e lo provo, poi ti so dire.
Ciao
Riccardo

Quello che mi hai dato non mi funziona, e mi sembra simile a quello che ho
copiato da un manuale. Il fatto è che non mi da errore, ma non mi fa nemmeno
l'upload del file, come posso fare?
Ciao
Riccardo

Ciao,
io ho realizzato uno script per l'upload che uso proprio su 
virtualave.net
,
per ora sembra funzionare correttamente, se vuoi provarlo lo trovi sulla mia home page
alla voce "forum".
Ti avviso pero' che non sono un esperto di Perl, sto imparando quindi non
ti garantisco il suo perfetto funzionamento e sicuramente puo' essere
migliorato.
Ecco il codice:
##############################################
#		INIZIO
##############################################
#!/usr/local/bin/perl
print "Content-type:text/html\n\n";
print "<html><head></head><body>";
$MAX_SIZE=1024 * 150; # Dimensione massima consentita 150k
$PATH= "/data1/
virtualave.net/xibio/public_html/upload
"; #non mettere "/" finale!!
if ($ENV{'CONTENT_LENGTH'} > $MAX_SIZE)		#verifica la dimensione
{
	print "<H1 align=center>File troppo lungo!</H1>";
	print "</body></html>";
	die;
}
$codice=<STDIN>;   #memorizza il codice contenuto nella prima riga d'intestazione
chop $codice;	#elimina \n dalla fine
chop $codice;	#elimina \r dalla fine
$filename=<STDIN>;
$filename=~ /filename="(.*)"/g;	#cerca il nome del file, puo' essere espresso con l'intero percorso
$filename=$1;
$filename=~ /[^\\\/]+$/g;	# estrae il solo nome del file eliminando l'eventuale percorso
$filename=$&;			# nome del file
$filename=~ tr/A-Z/a-z/;  # converte il nome in minuscolo
(<STDIN> eq "\r\n") || <STDIN>;	#controlla se e' finita l'intestazione, altrimenti legge un'altra
riga
read (STDIN, $buffer, 1024);
if ($buffer=~ /^\r\n$codice--\r\n/)
{
	print '<H1 align=center>Errore: il file selezionato ha dimensione nulla!!Torna indietro e
riprova</H1>';
	print "</body></html>";
	die;
}
$i=1;
$temp= $filename;
while (-e "$PATH/$filename")		#se il file esiste gia' cambia il nome
{
	$filename = $i . $temp;
	++$i;
}
if (!open (FILE , "> $PATH/$filename"))
{
	print "<H1 align=center>Errore: impossibile salvare il file! Riprova</h1>";
	print "</body></html>";
	die;
}
$buffer=~ s/\r\n$codice--\r\n//g;	#elimina la parte finale se e' nei primi 1024 byte
print FILE $buffer;
while ( read (STDIN, $buffer, 1024) )	
{
	$buffer=~ s/\r\n$codice--\r\n//g;	#elimina la parte finale
	print FILE $buffer;
}
close FILE;
chmod 0444, "$PATH/$filename";
print '<H1 align=center>Upload eseguito corretamente!</H1>';
print '<br><br><p>Torna indietro e ricarica la pagina!</p>';
print "</body></html>";
##############################################
#		FINE!!
##############################################
Nella pagina html devi mettere un form di tipo "file", cosi':
<form ENCTYPE="multipart/form-data" action="
http://xibio.virtualave.net/cgi-bin/myupload.pl
"
method="post">
File: <CENTER><input type="FILE" name="nomedelfile" size="30"><br>
<input type="submit" value="Invia">
<input type="reset" value="Cancella"></CENTER>
</form>
Fammi sapere
Ciao
Fabrizio
Email: 
xi...@xibio.it
Home page: 
http://xibio.virtualave.net


