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!