estoy tratando de descomprimir un archivo de 14 MB con PHP con código como el siguiente:descomprimir archivos más grandes con PHP
$zip = zip_open("c:\kosmas.zip");
while ($zip_entry = zip_read($zip)) {
$fp = fopen("c:/unzip/import.xml", "w");
if (zip_entry_open($zip, $zip_entry, "r")) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
fwrite($fp,"$buf");
zip_entry_close($zip_entry);
fclose($fp);
break;
}
zip_close($zip);
}
Se produce un error en mi localhost con el límite de 128 MB de memoria con el clásico "Allowed memory size of blablabla bytes exhausted
". En el servidor, tengo un límite de 16 MB, ¿hay una mejor manera de hacerlo para que yo pueda encajar en este límite? No veo por qué esto tiene que asignar más de 128 MB de memoria. Gracias por adelantado.
Solución: empecé a leer los archivos en fragmentos de 10 kb, que resuelve un problema con la memoria pico de uso arnoud 1,5 MB.
$filename = 'c:\kosmas.zip';
$archive = zip_open($filename);
while($entry = zip_read($archive)){
$size = zip_entry_filesize($entry);
$name = zip_entry_name($entry);
$unzipped = fopen('c:/unzip/'.$name,'wb');
while($size > 0){
$chunkSize = ($size > 10240) ? 10240 : $size;
$size -= $chunkSize;
$chunk = zip_entry_read($entry, $chunkSize);
if($chunk !== false) fwrite($unzipped, $chunk);
}
fclose($unzipped);
}
¿Cuál es el tamaño * descomprimido * del archivo comprimido? –
¿Está utilizando las herramientas de línea de comando una opción? –
El tamaño sin comprimir es de aproximadamente 110 MB. Desafortunadamente, usar la línea de comando no es una opción. – cypher