IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Zip] Transformer plusieurs fichiers en fichier zip


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut [Zip] Transformer plusieurs fichiers en fichier zip
    Bonjour,

    Ma mission :

    Convertir tout un dossier en un seul fichier zip...

    Mon problême :

    J'ai essayé d'utiliser la commande opendir pour lire tous les fichiers compris dans le dossier malheureusement cela reste inefficace. IL faudrait que tous les fichiers soient transposés dans le zip.

    J'utilise la librairie qu'on peut trouver sur ce site :

    http://cyberzoide.developpez.com/php4/compress/zip/

    Mon script ne fait que convertir un fichier "." dans mon zip. A noter que les fichiers sont des images.

    Donc la question, est ce le bon? Et est ce faisable? Si oui quel genre de commande dois je faire? Je suis un peu paumé je dois dire^^...

    Je vous remercie humblement d'avance pour votre aide...

  2. #2
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    En fait, il faut que tu créer une fonction récursive, qui vas ajouter tes fichiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function InsertFile($Path = "mondossierimage/")
    {
      $dir = @opendir($path);
      //Si c'est un dossier
      if($dir)
      {
        //On le parcoure
        while($file = readdir($dir))
        //Si c'est un fichier
        if(!is_dir($file) && $file != ".." && $file != "." && $file != ".htaccess" && $file != ".htpassword")
    	  {
    ////////////////CODE D'AJOUT AU ZIPE avec $path.$file////////////////
    	  }
          //Si c'est un dossier
         elseif(is_dir($file))
          InsertFile($Path.$file);
    }
    Un simple
    InsertFile();
    Sufit pour comprèsser tout le répertoire.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Oh d'accord, je vois. Je te remercie pour la réponse. J'essaierais cela dés demain^^ n'ayant pas accés à mon ordinateur avant...

    Je notifierais si j'ai un problême.

    Merci encore.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Bien après essai, je n'y arrive toujours pas^^... Je me demande donc si mon code est bon... Je vous le mets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?
    require_once('zip.lib.php');
     
    Function InsertFile($Path = "/Dossierimage/")
    {
      $dir = @opendir($Path);
      //Si c'est un dossier
      if($dir)
      {
        //On le parcoure
        While($file = readdir($dir))
        //Si c'est un fichier
        if(!is_dir($file) && $file != ".." && $file != "." && $file != "
    htaccess" && $file != ".htpassword")
         {  
    	 	$zip = new zipfile();      
    		$filename = "$Path.$file";
    		$fp = fopen ($filename, 'rb');
    		$content = fread($fp, filesize($filename));
    		fclose ($fp);
    		$zip->addfile($content, $filename);
    		$archive = $zip->file();
    		header('Content-Type: application/x-zip');      
    		header('Content-Disposition: inline; filename=archive.zip');
    		echo $archive;      
         }
          //Si c'est un dossier
         Elseif(is_dir($file))
          InsertFile($Path.$file);
    }
     
    InsertFile();
     
    ?>

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Attention, je te conseille d'utilise tout le temps les accolades, au risque d'avoir des surprises dans tes blocs de conditions/boucles...

    Je sais pas pourquoi, mais je sens que tu n'es pas très à l'aise avec la récursivité ^^
    Ton but c'est de zipper un répertoire. Algo:

    0. Création de l'archive
    1. Ouverture du répertoire et lecture du contenu
    2. Si c'est un fichier on ajoute celui-ci à l'archive
    3. Si c'est un dossier on "recurse" en 1
    4. On a fini le répertoire en cours donc on sort de la boucle
    5. on zip l'archive


    Or toi tu zip l'archive en plein milieu, avant l'etape 4...

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut Re: Transformer plusieurs fichiers en fichier zip...
    Citation Envoyé par Anakior
    Convertir tout un dossier en un seul fichier zip...
    [...]
    J'utilise la librairie qu'on peut trouver sur ce site :

    http://cyberzoide.developpez.com/php4/compress/zip/
    Tu risque d'avoir du mal avec ça !
    Citation Envoyé par [url
    http://cyberzoide.developpez.com/php4/compress/zip/[/url]]Attention : cette librairie ne permet d'archiver qu'un seul fichier en même temps.
    Il ne te reste plus qu'à trouver une autre librairie pour faire tes archives
    http://pear.php.net/search.php?q=archive

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Arf effectivement je n'avais pas vu cette mention. Je vais de ce pas chercher une librairie plus adéquate. Merci pour la notification.

    Sinon oui je ne suis pas trés à l'aise avec les fonctions recursives mais j'appends petit à petit^^... Merci en tout cas pour l'aide. Je reviendrais pour dire quand j'ai trouvé et arrivé à intégrer tout ça dans un code un peu plus logique que mon gros paté du haut^^....

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Finalement en utilisant cette librairie, j'ai reussi à trouver un code fonctionnant et me permettant de zipper tout un dossier. Mais voilà, dés que cela dépasse un certain poids (en mo), ça plante...

    Donc avec quelques fichiers ça marche...

    L'utilisation du pear me dérange dans mon application donc j'aimerais trouver une solution avec celui ci^^...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    require_once("zip.lib.php");       
     
    $fichier_zip = "archive_dvd.zip";        
    $zip= new zipfile;
    $path = "/Dossier image";           
     
     
    function zipDir($path,&$zip)
    {
     
       if (!is_dir($path)) return;
     
       if (!($dh = @opendir($path))) {
          echo("<b>ERREUR: Une erreur s'est produite sur ".$path."</b><br />");
          return;
       }
       while ($file = readdir($dh)) {
     
          if ($file == "." || $file == "..") continue;
          if (is_dir($path."/".$file)) { 
             zipDir($path."/".$file,$zip,$i);   
          } elseif (is_file($path."/".$file)) { 
     
             $zip->addFile(file_get_contents($path."/".$file),$path."/".$file);
          }
          }
    }
     
    zipDir($path,$zip);
    $filezipped=$zip->file();      
    $open = fopen($fichier_zip, "w");    
    fwrite($open, $filezipped);
    fclose($open);

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Bien finalement je suis passé par pclzip...

    Qu'on peut trouver ici :

    http://www.phpconcept.net/pclzip/

    Je le conseille vivement pour toute manipulation de fichier zip...

    En quatres lignes, de code j'ai reussi à faire ce que j'arrivais à faire avec toutes les lignes d'au dessus et sans que ça foire avec de trop gros dossier.

    J'ai reussi à faire donc ce que je voulais... Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compresser plusieurs fichier sur un ZIP
    Par bacarndiaye dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 15/07/2014, 11h45
  2. [Zip] Unzip plusieurs fichiers
    Par Angelsafrania dans le forum ASP.NET
    Réponses: 4
    Dernier message: 02/09/2008, 12h15
  3. Decouper un zip en plusieurs fichiers
    Par Galevsky dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 10/07/2008, 13h26
  4. Réponses: 1
    Dernier message: 15/06/2006, 15h17
  5. [ZIP]besoin de lire des fichiers avec l'extension tar.gz
    Par mathieublanc13 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/05/2004, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo