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

Langage PHP Discussion :

[Apache 2.4 Php FPM 7.3] ZipArchive extracto separateur dans les noms de fichier


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 9
    Points : 7
    Points
    7
    Par défaut [Apache 2.4 Php FPM 7.3] ZipArchive extracto separateur dans les noms de fichier
    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

  2. #2
    Membre actif
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Points : 246
    Points
    246
    Par défaut
    Bonjour,

    Question : comment sont généré les archives ?

    Au passage, est-il possible de nous fournir une archive contenant l'arborescence du dossier avant et après extraction ?
    Si vous avez besoin d'une librairie permettant de gérer facilement les fichiers et les dossiers en PHP... ou si vous êtes juste curieux(se) :
    https://github.com/moDevsome/moFilesManager

    N'hésitez pas à me faire un retour

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Bonjour Soundboy39,

    déjà merci d'avoir pris le temps de répondre

    Question : comment sont généré les archives ?
    Les archives sont générées avec ZipArchive également.


    est-il possible de nous fournir une archive contenant l'arborescence du dossier avant et après extraction
    Je ne peux malheureusement pas fournir ces données (confidentialité) mais elles correspondent au format donné dans la citation.

    Dans mes recherches, j'ai lu que c'était un problème qui pouvait arriver quand l'on essaye de créer une archive avec ziparchive et de la décompresser avec ziparchive.
    Si entretemps j'extrait cette archive avec winzip,7zip,... : pas de problème pour créer les dossiers et les noms (correction d'erreur plus poussée ??) et que j'utilise ce même outil pour recréer une archive cette fois ziparchive sait bien lire..

    Je me demande si le problème ne viendrait pas de $zip->addFile(string $filepath, sring $entryname = ""); ou entryname peut être utilisé pour définir un chemin a l'intérieur de l'archive.
    Fonctionnalité utilisée dans l'application. Par ex : Dossier1/Fic11.jpg
    Une petite fonction de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            $za->open($sourcePath);
            for( $i = 0; $i < $za->numFiles; $i++ ){
                $stat = $za->statIndex( $i );
                print_r( basename( $stat['name'] ) . PHP_EOL );
                print_r( $stat['name'] . PHP_EOL );
            }
    m'a permis de me rendre compte que peut importe comment était surchargé entryname, je me retrouvais avec un chemin complet du style :
    \xxx\xxx/xxx/monfichier

    lassé je m'en suis sorti avec ça :
    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
     
    public function nettoyageRep($sourcePath) {
            $files = new \RecursiveIteratorIterator(
                    new \RecursiveDirectoryIterator($sourcePath), \RecursiveIteratorIterator::LEAVES_ONLY
            );
     
            foreach ($files as $name => $file) {
                $trouve=false;
                $tabName=[];
                if (!$file->isDir()) {
                    $filePath = $file->getPath();
                    $fileName = $file->getFilename();
                    if (strpos($fileName,'/')){
                        $trouve=true;
                        $tabName=explode('/',$fileName);
                    }
                    if (strpos($fileName,'\\')){
                        $trouve=true;
                        $tabName=explode('\\',$fileName);
                    }
                    if ($trouve){                 
                        $newDir=$filePath;
                        $maxIndex=count($tabName)-1;
                        if ($maxIndex>=1){
                            $newDir=$filePath;
                            for ($i = 0; $i < $maxIndex; $i++)
                            {
                                $newDir.=DS.$tabName[$i];
                            }
     
                            if (!is_dir($newDir)){
                                if (!mkdir($newDir, 0777,true)){
                                        $this->flashMessage("Création Répertoire refusée Veuillez contacter un administrateur", self::DANGER);
                                        return false;
                                }
                            }
                        rename($filePath.DS.$fileName,$newDir.DS.$tabName[$maxIndex]);
                        }
                    }
                }
            }
            return true;
        }

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/07/2017, 11h48
  2. Apache / SuPHP / PHP-FPM
    Par genthial dans le forum Apache
    Réponses: 2
    Dernier message: 07/05/2014, 09h03
  3. Serveur Apache + PHP-FPM : Forte sollicitation et saturation?
    Par CaramelXS dans le forum Performance Web
    Réponses: 0
    Dernier message: 27/02/2014, 15h13
  4. Réponses: 4
    Dernier message: 21/07/2011, 22h57
  5. [PHP-JS] Refuser un achat si membre dans les -
    Par benjam89 dans le forum Langage
    Réponses: 15
    Dernier message: 20/08/2007, 22h35

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