Dézipper un fichier : trop grosse consommation de mémoire

Répondre
Damarice
le 12/02/2009 à 09:37
Damarice
Bonjours tous le monde j'ai un petit probléme avec la taille d'un fichier.

J'ai une petit fonction qui doit dézipper un fichier . Elle marche bien, je m'en suis servi de nombreuse fois. Cependant dés que le fichier devien trop gros plus rien ne va.

voila le code de ma fonction :



nom_du_fichier
<?php 

<?php

Dezipper('test.zip');//appel la fonction Dezipper



function Dezipper($Fichier)
{

$a1="/var/www/dev-ant/tmp/";
//$a2="c:\\wamp\\www\\";
$destination=$a1;
$df=$destination.$Fichier;//on concatene destination et fichier pour obtenir l'adresse final du fichier à dézipper
$zip = zip_open($df);//ouvre le fichier .zip pour le lire
//$zip = zip_open($Fichier);//ouvre le fichier .zip pour le lire
$zip_entry = zip_read($zip);//Pour chaque fichier contenu dans le fichier zip
//$zip_entry = zip_read($zip)//récupére le fichier contenu dans l'archive
$nom_fichier = zip_entry_name($zip_entry);// recupére le nom de l'entrée
//echo $nom_fichier;
$cf=$destination.$nom_fichier;//on concatene destination et fichier pour obtenir l'adresse final ou sera reporter le contenu du fichier dézipper
echo $cf;
zip_entry_open($zip, $zip_entry, "r");//on ouvre l'entrée en lecture
$fd = fopen($cf, "w");//on ouvre le dossier en ecriture

echo test;
fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)));// on ecrit dans le fichier
fclose($fd);//on ferme le fichier
zip_entry_close($zip_entry);//on ferme l'entree
zip_close($zip);//on ferme le fichier zip
echo "Fichier dezippe";
//$ok = unlink($cf);

}
?>

?>



quand j'execute le code on me retourne l'erreurs suivante :

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 209684883 bytes) in /var/www/dev-ant/Fonction_dezipper.php on line 26



Régler ce genre de soucis est assez simple normalement on va dans le php.ini et on augmente l taille limite. Cependant pour de raison qui serait trop longue a expliquer je ne peu pas modifier le php.ini.

Une autre solution aurait été possible avec ce code :

<?php test=ini_set("memory_limit","67M");//augmente la limite de memoire ?>


il est sencé modifier la taille limite juste la durée de l'execution du code. Cependant ce n'est pas compatible avec tout les serveur et apparement le mien en fait parti car méme avec cette cela ne change rien.

Voila voila donc si quelqu'un a une solution pour ce probléme je l'en remercierai infiniment

merci d'avance
LA GLOBULE
le 12/02/2009 à 12:19
LA GLOBULE
La solution n'est pas d'augmenter sans réfléchir la consommation possible de RAM, mais de comprendre pourquoi ton script "suce" autant de RAM : 67 Mo, c'est énorme.

Il doit surement exister un moyen de réduire cette consommation (en modifiant ton code), ou alors, transforme ton script en script CLI (de plus, tu risques de tomber en timeout si tu ne transformes pas ton script en CLI et Apache n'est pas fait pour effectuer ce genre de lourd traitement).
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours