Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1541 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  zip lib: memory exceeded sur les gros fichiers zip

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

zip lib: memory exceeded sur les gros fichiers zip

n°1955999
sue soeur ​debeat
Posté le 08-01-2010 à 01:34:00  profilanswer
 

Hello
 
J'ai un petit soucis, j'utilise la lib zip pour créer mes fichiers zip en PHP, cela marche mais au delà d'une certaine taille il me renvoie une erreur:

Code :
  1. <br />
  2. <b>Fatal error</b>:  Out of memory (allocated 678166528) (tried to allocate 221121457 bytes) in <b>C:\Program Files\xampp\phpMyAdmin\libraries\zip.lib.php</b> on line <b>183</b><br />


 
Pourtant dans php.ini j'ai mis memory_limit à 1000M et j'ai mis le max_execution_time à 600.
Quand je lance la création du fichier ZIP, je vois le processus httpd.exe consommer de plus en plus de ressources (jusqu'à 650Mo environ) puis il s'arrête sur cette erreur.
L'ensemble des fichiers à zipper fait 212Mo.
Voici mon code:
 

Code :
  1. require_once("zip.lib.php" ) ;
  2. $zip = new zipfile() ; //on crée un fichier zip
  3. // on liste tous les fichiers et on les ajoute au tableau $filename
  4. if ($dir = @opendir($mydir.$_GET['download']))
  5.  {
  6.  $filename = array() ;
  7.  while (($file = readdir($dir)) !== false)
  8.  {
  9. // on ajoute seulement les fichiers, pas les répertoires
  10.   if($file != ".." && $file != "." && !is_dir($mydir.$_GET['download'].$file))
  11.    array_push($filename,$file);
  12.  }
  13. }
  14. // Pour tous les fichiers dans le tableau, on lit leur contenu et on l'ajoute au fichier ZIP
  15. $a = 0 ;
  16. while(count($filename)>$a)
  17. {
  18.  $zip->addFile(file_get_contents($mydir.$_GET['download'].$filename[$a]), $filename[$a]) ; //on ajoute le fichier
  19.  $a++;
  20. }
  21. // on propose de télécharger ce fichier
  22. header("Content-type: application/octet-stream" );
  23. $aa=explode("/",$_GET['download'])    ;
  24. header("Content-disposition: attachment; filename=\"".$aa[sizeof($aa)-2].".zip\";" );
  25. echo $zip-> file();


 
Je sais pas trop quoi faire  :(


Message édité par sue soeur debeat le 08-01-2010 à 01:36:04
mood
Publicité
Posté le 08-01-2010 à 01:34:00  profilanswer
 

n°1956020
MagicBuzz
Posté le 08-01-2010 à 09:24:35  profilanswer
 

Je connais pas du tout cette lib, mais existe-t-il un mode de fonctionnement de cette lib qui ne crée pas un flux en mémoire, mais directement sur le disque ?
 
Dans ce cas, je ferais de cette façon (et d'ailleurs, par précaution, je te conseille de toujours faire comme ça) : tu zip tout dans un fichier temporaire sur le disque, puis tu envoies le fichier.
 
Ca devrait éviter de bouffer inutilement toute la mémoire.

n°1956023
stealth35
Posté le 08-01-2010 à 09:44:08  profilanswer
 

utilise l'extention de php  http://www.php.net/manual/fr/book.zip.php
(si tu peu bien sur )
 
je probleme aussi c'est que dans ta fonction tu lit le contenu du fichier
$zip->addFile(file_get_contents())
 
regarde si dans la doc de ta lib, si tu peu mettre le chemin du fichier plutôt (comme l'extension php)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  zip lib: memory exceeded sur les gros fichiers zip

 

Sujets relatifs
transférer beaucoup de fichiersLecteur rss : Récupérer les fichiers média d'un flux
Problème de structure et fichiers[PERL] Out of memory sur Win7 x64 [RESOLU]
Gros probleme de syntaxe php et/ou htmlremplissage de plusieurs fichiers XML depuis un fichier XLS
Où stocker les meta-informations d'un ensemble de fichiers ?HashCode pour verifier si deux fichiers sont identiques ?
[VBS] Rechercher des fichiers selon leur nomFichiers .swf dans flux RSS ?
Plus de sujets relatifs à : zip lib: memory exceeded sur les gros fichiers zip


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR