Soy programador de PHP entre otros lenguajes y estoy creando un script para subir archivos al servidor.
Hoy estuve viendo los ejemplos de cómo hacerlo con Perl, ya que con PHP no puedo consultar el progreso a no ser que instale una extensión, cosa que no quiero en estos momentos.
Nunca había tocado Perl hasta hoy y he estado deduciendo el script aquí posteado y añadido algunas modificaciones.
Me gustaría resolver un par de dudas, ya que desconozco las funciones que Perl pone a nuestra disposición, aunque la sintaxis del lenguaje es parecida a PHP, cosa que me facilita el aprendizaje.
El upload lo hace sin problemas, pero:
1. ¿Cómo podría subir el archivo añadiéndole un identificador? De esta forma poder consultar su progreso y mostrarlo al usuario.
2. Cuando subo el archivo a la carpeta correspondiente, ¿Cómo elimino el archivo temporal que se crear dentro de cgi-bin?
3. ¿Cómo puedo crear carpetas? Me interesaría crear una carpeta con el nombre del identificador que obtengo mediante GET dentro de la carpeta de archivos para subirlo ahí.
Aún tengo que añadir algunas cosas, como tamaño máximo, etc... pero de momento lo que me trae más "de cabeza" son estas 3 cuestiones.
Os adjunto el código modificado:
Using perl Syntax Highlighting
#!C:\xampp\perl\bin\perl.exe -w
use CGI qw(:standard);
print header;
require 'postget.pl';
my %datos;
%datos = &postget('G');
my $codeID = $datos{'codeID'};
my $upID = $datos{'upID'};
if($codeID && $upID)
{
$query = new CGI;
$UpFile = $query->param("UpFile");
$UpFile =~ s/.*[\/\\](.*)/$1/;
$UpFileHandle = $query->upload("UpFile");
$UpDir = '../files';
my @Ext = ('php','php3','php4','pl','cgi','asp','aspx');
my $CorrectExt = 1;
foreach(@Ext)
{
if($UpFile =~ /\.$_$/i)
{
$CorrectExt = 0;
last;
}
}
if($CorrectExt eq 1)
{
open(UPLOADFILE, ">$UpDir/$UpFile") or die 'Upload error.';
binmode UPLOADFILE;
while(<$UpFileHandle>)
{
print UPLOADFILE;
}
close UPLOADFILE;
print 'File uploading success.';
print '<br />';
print 'CodeID: '.$codeID;
print '<br />';
print 'UpID: '.$upID;
}
else
{
print 'The file extension is forbidden.';
}
}
else
{
print 'Upload error: CodeID and UpID are empty.';
}
use CGI qw(:standard);
print header;
require 'postget.pl';
my %datos;
%datos = &postget('G');
my $codeID = $datos{'codeID'};
my $upID = $datos{'upID'};
if($codeID && $upID)
{
$query = new CGI;
$UpFile = $query->param("UpFile");
$UpFile =~ s/.*[\/\\](.*)/$1/;
$UpFileHandle = $query->upload("UpFile");
$UpDir = '../files';
my @Ext = ('php','php3','php4','pl','cgi','asp','aspx');
my $CorrectExt = 1;
foreach(@Ext)
{
if($UpFile =~ /\.$_$/i)
{
$CorrectExt = 0;
last;
}
}
if($CorrectExt eq 1)
{
open(UPLOADFILE, ">$UpDir/$UpFile") or die 'Upload error.';
binmode UPLOADFILE;
while(<$UpFileHandle>)
{
print UPLOADFILE;
}
close UPLOADFILE;
print 'File uploading success.';
print '<br />';
print 'CodeID: '.$codeID;
print '<br />';
print 'UpID: '.$upID;
}
else
{
print 'The file extension is forbidden.';
}
}
else
{
print 'Upload error: CodeID and UpID are empty.';
}
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Espero que podáis ayudarme.
Gracias.