Newsgroup: it.comp.lang.perl
Titolo: File_upload

Ciao a tutti,
ho scaricato lo script File_upload che si trova a:
http://www.terminalp.com/scripts
Questo script mi serve per uplodare files tramite un pannello di controllo
costituito da una pagina html.
Richiede il modulo CGI.pm, che ho provveduto ad inserire sul server insieme
allo script.
Funziona tutto, però lo script è scritto per potere usare una sola directory
di destinazione, invece a me serve di potere raggiungere 2 directory di
destinazione dei files.
Un metodo semplice ma veramente deludente sarebbe fare due form sulla stessa
pagine che invocano due copie dello script con le due diverse dir. di
destinazione.
Preferirei se possibile invece potere modificare leggermente lo script in
modo che si possa decidere tramite dei form radio l'invio sull'una o
sull'altra dir.
Ho tentato con i sistemi che conosco per manipolare i form in perl, ma non
funzionano.
Tra l'altro la variabile che indica la dir di destinazione è contenuta
dentro BEGIN e questo mi sa che complica le cose.
Allego l'inizio dello scipt per maggiore chiarezza:
# Configurable Options Follow:
#
BEGIN {
 $SAVE_DIRECTORY = "/usr/home/shishii/www/sfondi";
                              #
                              # --> Variable:
                              #         $SAVE_DIRECTORY
                              # --> Function:
                              #         Defines the path to the directory
                              #         on the server that should be used
                              #         as the folder to save files into.
                              # --> Directory Permissions:
                              #         a+rwx
                              # --> Additional Notes:
                              #         This path should not have a
         #         trailing forward slash.  Also
         #         remember that this is a path, not
         #         a URL.  Use something similar to:
         #
         #         /home/myself/www/uploads
         #
 $MAXIMUM_UPLOAD = 0;
                              #
                              # --> Variable:
                              #         $MAXIMUM_UPLOAD
                              # --> Function:
                              #         Defines the number of bytes that
                              #         can be uploaded.  Files that exceed
                              #         this limit will not be saved on the
         #         server.
                              # --> Additional Notes:
         #         Set this to zero in order to
         #         disable size checking.
         #
 $ALLOW_INDEX = 1;
                              #
                              # --> Variable:
                              #         $ALLOW_INDEX
                              # --> Function:
                              #         If set to zero, files whose
         #         names begin with the word
         #         index will not be saved.
                              #
         #         Set to one to allow files
         #         named index* to be uploaded.
                              # --> Additional Notes:
                              #
 $SUCCESS_LOCATION = "
http://www.shishii.com/index.html
"
                              #
                              # --> Variable:
                              #         $SUCCESS_LOCATION
                              # --> Function:
                              #         Defines the URL that users
                              #         should be redirected to if
         #         the script works properly.  If
         #         this is left blank, a default
         #         page will be returned to the
         #         user.
                              # --> Additional Notes:
                              #         This is a COMPLETE URL, not
                              #         a path.
}
#
# End of Configurable Options.
# ---------------------------------------------------------------------
# ---------------------------------------------------------------------
# -->           Do Not Change Anything Below This Line.           <-- #
# ---------------------------------------------------------------------
# ---------------------------------------------------------------------
 $| = 1;
 chop $SAVE_DIRECTORY if ($SAVE_DIRECTORY =~ /\/$/);
 use CGI qw(:standard);
 $query = new CGI;
 if ( (!(-e $SAVE_DIRECTORY)) ||
   (!(-W $SAVE_DIRECTORY)) ||
   (!(-d $SAVE_DIRECTORY)) ) {
  print header;
  print <<__END_OF_HTML_CODE__;
Ecc. ecc............
Grazie.
--
Marco Allegretti
shi...@katamail.com
http://www.shishii.com

 Ecc. ecc............
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)


Ti ringrazio per la efficace risposta.
Ti volevo segnalare che ho riscritto cosě la parte iniziale dello script, ed
ho apportato due modifiche rispetto a quanto mi avevi indicato, altrimenti
mi dava error 500:
BEGIN {
       %SAVE = ( prima => '/usr/home/shishii/www/sfondi',
                 seconda => '/usr/home/shishii/www/immagini');
 $MAXIMUM_UPLOAD = 0;
 $ALLOW_INDEX = 1;
 $SUCCESS_LOCATION = "
http://216.121.175.21/index.html
"
}
#
# End of Configurable Options.
     use CGI qw(:standard);  # qui ho dovuto spostare la chiamata del modulo
a prima dell'uso di param, mentre in origine era posta sotto a chop
$SAVE_....
 $query = new CGI;
   # in questa riga ho dovuto eliminare la stringa $| = 1;
    $scelta = $query->param('directory'); # se nel form hai NAME='directory'
    $SAVE_DIRECTORY = $SAVE{$scelta} || $SAVE{prima};
 chop $SAVE_DIRECTORY if ($SAVE_DIRECTORY =~ /\/$/);
 if ( (!(-e $SAVE_DIRECTORY)) ||
   (!(-W $SAVE_DIRECTORY)) ||
   (!(-d $SAVE_DIRECTORY)) ) {
  print header;
  print <<__END_OF_HTML_CODE__;
Adesso funziona tutto e ti ringrazio.


Questo script può funzionare anche per trasferire su
uno spazio che richiede user name e password?
Grazie
F.