Bueno está este CGI que quiero arreglar, lo que hace es comprimir un folder en un zip, lo genera en tiempo real, el problema es que el código truena y genera un archivo vacío si el folder es muy grande, con folders no tan grandes jala a la perfección,
Mi pregunta es: ¿Cual forma creen que sería la más eficiente para corregir eso?
Mi solución había sido leer el folder y calcular el tamaño de los archivos, dependiendo del tamaño los separaría en los zips que fueran necesarios para que no truene, pero en realidad creo que es muy poco eficiente esto, ¿alguna otra idea?
El código:
- Código: Seleccionar todo
sub GetDir
{
$files_dir = $_[0];
$zipfile = $_[1];
opendir(DIR, $files_dir) or die "damn no pude abrir el directorio!";
@dir = readdir DIR;
closedir DIR;
foreach my $item (@dir)
{
$spec = $files_dir . '/' . $item;
if (-d $spec)
{
unless (length($item)==1)
{
unless(length($item)==2)
{
&GetDir("$spec", $zipfile);
}
}
} else {
$member = $zipfile->addFile("$spec");
}
}
}
if ($dtar ne "") {
print "Content-Type: application/zip\n\n";
$file = tmpnam() . ".zip";
my $zip = Archive::Zip->new();
GetDir($dtar, $zip);
$zip->writeToFileNamed("$file");
open (TMPFILE, $file) || die ("$!");
print <TMPFILE>;
close (TMPFILE);