Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks
Bibliothèques et frameworks Forum d'entraide sur les frameworks, templates, bibliothèques de code (PDFLib, eZPdf, JpGraph, Artichow, PEAR, etc). Avant de poster : FAQ bibliothèques, toutes les FAQ PHP et cours bibliothèques
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/03/2007, 14h45   #1
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
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 :
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!
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2007, 14h55   #2
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

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


Code :
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';
}
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h46.


 
 
 
 
Partenaires

Hébergement Web