Bonjour,

j'essaye d'extraire une archive a l'aide de ZipArchive.
Format archive :
aaa.Zip
|Dossier1
|| Fic11.jpg
|| Fic12.jpg
|Dossier2
|| Fic21.jpg
|| Fic22.jpg
|| Fic23.jpg
|Ficx1.jpg
|Ficx2.jpg
Mais voila, l'extraction se produit bien mais
une fois dézippé sur serveur cela donne :
tmpArchivePCM
|Dossier1/Fic11.jpg
|Dossier1/Fic12.jpg
|Dossier2/Fic21.jpg
|Dossier2/Fic22.jpg
|Dossier2/Fic23.jpg
|Ficx1.jpg
|Ficx2.jpg
le séparateur "/" faisant parti du nom du fichier sur une machine Ubuntu…
sur une machine Windows via un docker ça me met un caractère inconnu a la place du "/".

Si je télécharge l'archive sur mon poste Windows; elle fonctionne bien dans un 7zip et conserve l'architecture des dossiers et les noms sont corrects (pas de nom de dossier collé).

Cela fait peu de temps que j'ai repris le dev en Php après des années et je dois modifier une appli déjà existante et je bute sur ce point depuis 2 semaines et mes recherches ne donnent rien.
Un petit coup de main serait pas de refus.

voici mon code

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
 
public function getArchivePCMFormated($numdossier, $path) {
        $nomRepTravail = "tmpArchivePCM";
        //$DIRECTORY_SEPARATOR = $DS = "/"; constante php
        $fileToDelete = array();        
        try {
            $this->flashMessage("test file_exists => $path");
            if (!file_exists($path)){
                $this->flashMessage("Archive Absente ! Veuillez contacter un administrateur");
                throw new \Exception\NotFoundException();
            }
 
            /*   *** creation rep travail extract **** */
            $parentFolderPath = dirname($path, $levels = 1);
            $workFolderPath = $parentFolderPath.DIRECTORY_SEPARATOR.$nomRepTravail;
            if (!is_dir($workFolderPath)){
                if (!mkdir($workFolderPath, 0777)){
                    $this->flashMessage("Creation Repertoire refusée Veuillez contacter un administrateur", self::DANGER);
                    throw new DomainException('Creation Repertoire refusée');
                }
            }
            $this->flashMessage("workfolder =>".$workFolderPath);
 
            /*   *** extraction archive courante **** */
            $zip = new \ZipArchive();
            if ($zip->open($path, \ZipArchive::CREATE)){
                $this->flashMessage("zip open");
//probleme sur le slash de fin de extractTo ???
                echo("zip->extractTo(".$workFolderPath.DS.");");
                if ($zip->extractTo($workFolderPath.DS)){
                    $this->flashMessage("zip extrait");
                }else{ $this->flashMessage("ko extraction");}
                $zip->close();
                die();
            }else{
                $this->flashMessage("Impossible d'ouvrir l'archive \n Veuillez contacter un administrateur", self::DANGER);
                throw new DomainException('Creation Archive refusée');
                return false;
            }
		}
		catch (Exception $ex) {
             echo "<br/>","Exception ,", $ex->getMessage();
            \Mvc\perso_trace($ex);
            return false;
        } 
    }
le echo donne :
zip->extractTo(/var/www/html/data/upload/tmpArchivePCM/)

Si il manque des infos n'hésitez pas a me le faire savoir