Tengo un cgi que sube un archivo al server... jala muy bien, pero el problema es que necesito que suba varios archivos, es decir, yo selecciono con múltiples input file y sube todos al servidor y los graba en el server... ahorita está así, el form que llama al cgi:
- <?php
- // funcion que crea o revisa que una carpeta este generada dentro del servidor.
- function mkdir_recursiva($path, $mode) {
- is_dir(dirname($path)) || mkdir_recursiva(dirname($path), $mode);
- return is_dir($path) || @mkdir($path, $mode);
- }
- // funcion que genera un nombre de archivo aleatorio de tamaño x
- function randomtext($tamano) {
- $patron = "abcdefghijklmnopqrstuvwxyz1234567890";
- for ($i=0; $i<$tamano; $i++) {
- $llave .= $patron{rand(0,35)};
- }
- return $llave;
- }
- $ok = mkdir_recursiva("/home/users/web/b890/sl.recintoi/public_html/tmp", 0755);
- ?>
- <form action="/upload.cgi" method="post"
- enctype="multipart/form-data">
- <p>Archivo: <input type="file" name="fuente" /></p>
- <input type="hidden" value="/baby/img/cuadros/" name="dir" />
- <input type="hidden" value="<?=randomtext(8)?>" name="destino" />
- <input type="hidden" value="<?=$R?>*<?=$IDC?>" name="P" />
- <input type="hidden" value="/baby/admin/okupload.php" name="terminar" />
- <p><input type="submit" name="Submit" value="Submit Form" /></p>
- </form>
- </body>
- </html>
El input fuente es el archivo como escondidos le envío:
dir : Nombre de la carpeta donde quiero que lo guarde en el servidor.
destino: nombre del archivo destino con el que se va a grabar.
P : son parámetros que envío desde el php.
terminar: es el archivo php que quiero que llame una vez que termine de subir el archivo.
Ahora el perl es el siguiente:
Using perl Syntax Highlighting
$CGI::POST_MAX = 1024 * 15000;
my $safe_filename_characters = "a-zA-Z0-9_.-";
my $query = new CGI;
my $fuente = $query->param("fuente");
my $dir = $query->param("dir");
my $destino = $query->param("destino");
my $terminar = $query->param("terminar");
my $P = $query->param("P");
my $upload_dir = "/home/users/web/b890/sl.recintoi/public_html/tmp";
if ( !$fuente )
{
print $query->header ( );
print "Archivo muy grande, reduzca su foto.";
exit;
}
my ( $name, $path, $extension ) = fileparse ( $fuente, '\..*' );
$fuente = $destino . $extension;
$fuente =~ tr/ /_/;
$fuente =~ s/[^$safe_filename_characters]//g;
if ( $fuente =~ /^([$safe_filename_characters]+)$/ )
{
$fuente = $1;
}
else
{
die "El archivo contiene caracteres invalidos.";
}
my $upload_filehandle = $query->upload("fuente");
open ( UPLOADFILE, ">$upload_dir/$fuente" ) or die "$!";
binmode UPLOADFILE;
while ( <$upload_filehandle> )
{
print UPLOADFILE;
}
close UPLOADFILE;
print $query->header ( );
print <<END_HTML;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="0;URL=http://www.recintocampestre.com$terminar?D=$dir&A=$fuente&P=$P" />
<title>Thanks!</title>
<style type="text/css">
img {border: none;}
</style>
</head>
<body>
<!-- <p>Thanks for uploading your photo!</p>
<p>Your photo:</p>
<p><img src="http://www.recintocampestre.com/tmp/$ fuente" alt="Photo" /></p> -->
</body>
</html>
END_HTML
my $safe_filename_characters = "a-zA-Z0-9_.-";
my $query = new CGI;
my $fuente = $query->param("fuente");
my $dir = $query->param("dir");
my $destino = $query->param("destino");
my $terminar = $query->param("terminar");
my $P = $query->param("P");
my $upload_dir = "/home/users/web/b890/sl.recintoi/public_html/tmp";
if ( !$fuente )
{
print $query->header ( );
print "Archivo muy grande, reduzca su foto.";
exit;
}
my ( $name, $path, $extension ) = fileparse ( $fuente, '\..*' );
$fuente = $destino . $extension;
$fuente =~ tr/ /_/;
$fuente =~ s/[^$safe_filename_characters]//g;
if ( $fuente =~ /^([$safe_filename_characters]+)$/ )
{
$fuente = $1;
}
else
{
die "El archivo contiene caracteres invalidos.";
}
my $upload_filehandle = $query->upload("fuente");
open ( UPLOADFILE, ">$upload_dir/$fuente" ) or die "$!";
binmode UPLOADFILE;
while ( <$upload_filehandle> )
{
print UPLOADFILE;
}
close UPLOADFILE;
print $query->header ( );
print <<END_HTML;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="0;URL=http://www.recintocampestre.com$terminar?D=$dir&A=$fuente&P=$P" />
<title>Thanks!</title>
<style type="text/css">
img {border: none;}
</style>
</head>
<body>
<!-- <p>Thanks for uploading your photo!</p>
<p>Your photo:</p>
<p><img src="http://www.recintocampestre.com/tmp/$ fuente" alt="Photo" /></p> -->
</body>
</html>
END_HTML
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4
No soy experto en Perl pero más o menos le he ido modificando y añadiéndole cosas, pero el problema es que necesito que suba varios archivos y no lo consigo...
Alguien me podría ayudar... ya estoy empezando a desesperarme y me urge...
Saludos y gracias a todos
Bruno Chavez