Je suis en train de décompresser une archive 14Mo avec PHP avec le code comme ceci:fichiers PHP plus grandes avec Dézippage
$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);
}
Il échoue sur mon localhost avec la limite de 128 Mo de mémoire avec le classique « Allowed memory size of blablabla bytes exhausted
». Sur le serveur, j'ai une limite de 16 Mo, y a-t-il une meilleure façon de le faire pour que je puisse tenir dans cette limite? Je ne vois pas pourquoi cela doit allouer plus de 128 Mo de mémoire. Merci d'avance.
Solution: J'ai commencé à lire les fichiers en morceaux 10KB, problème résolu avec utilisation de la mémoire de pointe 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);
}
Quelle est la taille * non compressée du fichier zip? –
L'utilisation d'outils de ligne de commande est-elle une option? –
La taille non compressée est d'environ 110 Mo. Malheureusement, l'utilisation de la ligne de commande n'est pas une option. – cypher