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] Problème lors de la décompression


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut [Zip] Problème lors de la décompression
    Bonjour à tous!

    Je viens de trouver un script super pour qu'une fois un fichier uploadé sur le serveur, celui-ci soit décompressé dans le chemin souhaité.

    Seulement petit problème :

    Lorsque mon zip contient des répertoires qui contiennent à leur tour des fichiers, ces fichiers ne sont pas décompressés dans ces répertoires, mais au même niveau que les répertoires.

    En gros, lors de la décompression, l'arborescence n'est pas respectée. tout est décompressé au même niveau.

    Que faire pour que chaque fichier se décompresse bien dans son répertoire conteneur?

    Voici la fonction :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    function unzip($file, $path='', $effacer_zip=false){
     /*Méthode qui permet de décompresser un fichier zip $file dans un répertoire de destination $path
      et qui retourne un tableau contenant la liste des fichiers extraits
      Si $effacer_zip est égal à true, on efface le fichier zip d'origine $file*/
      $file=realpath($file);
      $tab_liste_fichiers = array(); //Initialisation
      $zip = zip_open($file);
     
      if ($zip)
      {
      while ($zip_entry = zip_read($zip)) //Pour chaque fichier contenu dans le fichier zip
      {
      if (zip_entry_filesize($zip_entry) > 0)
      {
      $complete_path = $path.dirname(zip_entry_name($zip_entry));
     
      /*On supprime les éventuels caractères spéciaux et majuscules*/
      $nom_fichier = zip_entry_name($zip_entry);
      $nom_fichier = strtr($nom_fichier,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
      $nom_fichier = strtolower($nom_fichier);
      $nom_fichier = ereg_replace('[^a-zA-Z0-9.]','-',$nom_fichier);
     
      /*On ajoute le nom du fichier dans le tableau*/
      array_push($tab_liste_fichiers,$nom_fichier);
     
      $complete_name = $path.$nom_fichier; //Nom et chemin de destination
     
      if(!file_exists($complete_path))
      {
      $tmp = '';
      foreach(explode('/',$complete_path) AS $k)
      {
      $tmp .= $k.'/';
     
      if(!file_exists($tmp))
      { mkdir($tmp, 0755); }
      }
      }
     
      /*On extrait le fichier*/
      if (zip_entry_open($zip, $zip_entry, "r"))
      {
      $fd = fopen($complete_name, 'w');
     
      fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)));
     
      fclose($fd);
      zip_entry_close($zip_entry);
      }
      }
      }
     
      zip_close($zip);
     
      /*On efface éventuellement le fichier zip d'origine*/
      if ($effacer_zip === true)
      unlink($file);
      }
     
     return $tab_liste_fichiers; 
     
    }
    Merci à vous!

  2. #2
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    C'est dans ces cas là que je me dis que les classes PHP c'est très bien!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $zip = new ZipArchive;
    if ($zip->open('test.zip') === TRUE) {
        $zip->extractTo('/mon/dossier/destination/');
        $zip->close();
        echo 'ok';
    } else {
        echo 'échec';
    }

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

Discussions similaires

  1. Problème lors du renomage d'un zip
    Par Loubna.B dans le forum C#
    Réponses: 4
    Dernier message: 25/08/2009, 15h37
  2. probléme lors du download de zip
    Par boudigard dans le forum Langage
    Réponses: 2
    Dernier message: 30/04/2009, 14h32
  3. Problème lors de décompression zip
    Par LuckyLuke56 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 19/10/2006, 00h39
  4. 7-Zip - Problème de décompression en ligne de commande
    Par Lorponos dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 26/07/2006, 15h07
  5. Réponses: 2
    Dernier message: 17/08/2003, 20h07

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