Sto cercando di decomprimere un archivio 14MB con PHP con codice come questo:Decompressione file più grandi 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);
}
Viene a mancare sul mio localhost con il limite di 128 MB di memoria con il classico "Allowed memory size of blablabla bytes exhausted
". Sul server, ho un limite di 16MB, c'è un modo migliore per farlo in modo che possa rientrare in questo limite? Non vedo perché questo deve allocare più di 128 MB di memoria. Grazie in anticipo.
Soluzione: ho iniziato a leggere i file in blocchi 10kb, problema risolto con la memoria di picco utilizzo Arnoud 1.5MB.
$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);
}
Qual è la dimensione * non compressa * del file zip? –
È possibile utilizzare gli strumenti della riga di comando? –
La dimensione non compressa è di circa 110 MB. Sfortunatamente, usare la riga di comando non è un'opzione. – cypher