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 :

Décompression d'un fichier zip


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut Décompression d'un fichier zip
    Bonjour à tous,

    Alors voilà je dois uploader un dossier sur mon serveur.

    J'ai donc choisis d'uploader un fichier .zip puis de le décompresser une fois sur le serveur.

    Voilà mon code actuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $zip = new ZipArchive;
                        if ($zip->open($fichier) === TRUE) {
                            $zip->extractTo($dossier);
                            $zip->close();
                            echo 'Dézip réussis';
                        } else {
                            echo 'Echec dézip ! ';
                        }
    $fichier viens de là et contient le nom de mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fichier = basename($_FILES['fichier']['name']);
    $dossier contient le nom du répertoir ou il doit être extrait :
    Cette méthode est à la suite d'une méthode pour upload un fichier sur le serveur, d'où la ligne de code avec $_FILES pour ma variable $fichier.

    Mais voilà mon soucis c'est que ça ne marche pas, la page m'affiche "Echec dézip" et je ne comprends pas pourquoi.

    Cela viens t'il de ma variable $fichier ?

    Merci d'avance

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Tu n'a pas/ ne dois pas utiliser la fonction basename, tu dois laisser le chemin vers le fichier.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut
    D'accord, mais pourtant $fichier contient bien le nom de mon fichier, je dois donc utiliser une autre méthode ?

    Vu qu'il m'est impossible d'utilisé la varaible $fichier, comment puis je procéder pour récupérer dans une variable le lien vers le fichier ?

    Merci d'avance

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le fichier réellement uploadé c'est $_FILES['tmp_name'].
    $_FILES['name'] ne contient que le nom d'origine.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut
    Mais la fonction à besoin du nom du fichier nom ? (J'ai n'ai qu'une seule fois le fichier dans mon répertoire)

    Sinon, je peux passer le dans une variable ou pas ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Oui enfin $_FILES['fichier']['tmp_name'].
    Pour être plus clair, PHP donne un nom aleatoire au fichier uploadé ; $_FILES['fichier']['tmp_name'] est le chemin complet vers ce fichier.
    $_FILES['fichier']['name'] contient uniquement le nom qu'avait le fichier à l'origine.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut
    Après ajustement de mon code ce dernier donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $fichierUp = $_FILES['fichier']['tmp_name'];
    $zip = new ZipArchive;
                        if ($zip->open($fichierUp) === TRUE) {
                            $zip->extractTo($dossier);
                            $zip->close();
                            echo 'Dézip réussis';
                        } else {
                            echo 'Echec dézip ! ';
                        }
    Et ça ne marche toujours pas, il m'affiche toujours Echec dézip..

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Que donne
    ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut
    Bonjour Sabotage,

    alors le : donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { ["fichier"]=> array(5) { ["name"]=> string(14) "testprojet.zip" ["type"]=> string(24) "application/octet-stream" ["tmp_name"]=> string(23) "C:\wamp\tmp\phpD4CB.tmp" ["error"]=> int(0) ["size"]=> int(593270) } }

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Debugue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result  = $zip->open($fichierUp);
    echo $result;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut
    Euh.. En faisant comme ceci du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $zip = new ZipArchive;
                        $result = $zip->open($fichierUp);
                        echo $result;                    /*if ($zip->open($fichierUp) === TRUE) {
                            $zip->extractTo($dossier);
                            $zip->close();
                            echo 'Dézip réussis';
                        } else {
                            echo 'Echec dézip ! ';
                        } */
    Donc en mettant tout en commentaire et en rajoutant ce que tu m'as dit (var_dump aussi en commentaire.)

    Ça m'affiche tout simplement :

    11

    Là je pige pas du tout ! Pourquoi il affiche 11 comme ça ?

    Par curiosité j'ai fais un :
    Et ça me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\wamp\tmp\php2CDF.tmp
    Je croyais que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fichierUp = $_FILES['fichier']['tmp_name'];
    devait récupérer le chemin de mon fichier non ?

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    11 est le code d'erreur correspondant à une impossibilité d'ouvrir le fichier; cela pourrait être un problème de droits sur le repertoire tmp.
    Le chemin que tu as est bien le chemin du fichier uploadé.

    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    error_reporting(E_ALL);
    move_uploaded_file($_FILES['fichier']['tmp_name'], './' . $_FILES['fichier']['name']);
    $zip = new ZipArchive;
    $result = $zip->open('./' . $_FILES['fichier']['name']);
    echo $result;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut
    Donc avec les modification que tu m'as conseillé, mon code donne ç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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <?php
            //Vérifie si fichier existe
            if (isset($_FILES['fichier'])) {
                // Dossier de destination
                $dossier = 'plans/';
                $fichierUp = $_FILES['fichier']['tmp_name'];
                //var_dump($_FILES);
                //Extrait le nom du fichier
                $fichier = basename($_FILES['fichier']['name']);
                //Taille maximalle 50Mo
                $taille_maxi = 50000000;
                //Lit taille fichier
                $taille = filesize($_FILES['fichier']['tmp_name']);
                // Création tableaux avec format autorisé
                $extensions = array('.ifc', '.unity', '.zip');
                // Récupère la partie de la chaine à partir du dernier . pour connaitre l'extension
                $extension = strrchr($_FILES['fichier']['name'], '.');
                // Debut vérification 
                if (!in_array($extension, $extensions)) {
                    $erreur = "Vous devez uploader un fichier de type .zip"; // Si l'extensions n'est pas dans le tableau 
                }
                if ($taille > $taille_maxi) {
                    $erreur = "Le fichier est trop volumineux, veuillez upload un fichier de moins de 50Mo.";
                }
                if (!isset($erreur)) {
                    // Remplacement des lettres accentuées
                    $fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                    // Expression régulière remplaçant tout ce qui n'est pas chiffre ou lettre non-accentués par un '-'
                    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
                    error_reporting(E_ALL);
                    //Si fichier bon et déplacé, exécution ajout info base
                    if (move_uploaded_file($_FILES['fichier']['tmp_name'], './' . $_FILES['fichier']['name'])) {
                        $zip = new ZipArchive;
                        $result = $zip->open('./' . $_FILES['fichier']['name']);
                        echo $result;
                        /* if ($zip->open($fichierUp) === TRUE) {
                          $zip->extractTo($dossier);
                          $zip->close();
                          echo 'Dézip réussis';
                          } else {
                          echo 'Echec dézip ! ';
                          } */
                        /* require 'connect.php';
                          // récupérations des valeurs des champs :
                          $ajoutnom = $_POST["nom_plan"];
                          $ajoutdesi = $_POST["desi_plan"];
                          $nomplan = $_FILES['fichier']['name'];
                          $lienplan = 'plans/' . $nomplan;
    
                          //requête sql :
                          $ajoutPlanSQL = "INSERT INTO vv_plans (nom_plan, designation, lien_plan)
                          VALUES( :nom_plan, :desi_plan, :lien_plan)";
    
                          // exécution de la requête :
                          $sth = $dbh->prepare($ajoutPlanSQL);
                          $sth->execute(array(':nom_plan' => $_POST["nom_plan"], ':desi_plan' => $_POST["desi_plan"], ':lien_plan' => $lienplan));
    
                          // vérification de l'exécution
                          if ($sth) {
                          header("location:ajoutPlan.php");
                          } else {
                          echo "Ajout base échoué";
                          } */
                    } else {
                        echo 'Echec upload..';
                    }
                } else {
                    echo $erreur;
                }
            }
            ?>
    Et ça m'affiche : 1

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    1 ca veut dire que c'est bon
    Tu dois avoir un problème de droits sur le repertoire tmp comme je t'ai dit puisque quand on déplace le fichier, cela fonctionne.

    Au passage tu crées les variables $fichierUp et $fichier mais tu utilises quand même $_FILES dans la suite du code.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut
    En tenant compte de tes remarques :

    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
    if (isset($_FILES['fichier'])) {
                // Dossier de destination
                $dossier = 'plans/';
                $fichierUp = $_FILES['fichier']['tmp_name'];
                $nomfichier = $_FILES['fichier']['name'];
                //var_dump($_FILES);
                //Extrait le nom du fichier
                $fichier = basename($_FILES['fichier']['name']);
                //Taille maximalle 50Mo
                $taille_maxi = 50000000;
                //Lit taille fichier
                $taille = filesize($_FILES['fichier']['tmp_name']);
                // Création tableaux avec format autorisé
                $extensions = array('.ifc', '.unity', '.zip');
                // Récupère la partie de la chaine à partir du dernier . pour connaitre l'extension
                $extension = strrchr($_FILES['fichier']['name'], '.');
                // Debut vérification 
                if (!in_array($extension, $extensions)) {
                    $erreur = "Vous devez uploader un fichier de type .zip"; // Si l'extensions n'est pas dans le tableau 
                }
                if ($taille > $taille_maxi) {
                    $erreur = "Le fichier est trop volumineux, veuillez upload un fichier de moins de 50Mo.";
                }
                if (!isset($erreur)) {
                    // Remplacement des lettres accentuées
                    $fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                    // Expression régulière remplaçant tout ce qui n'est pas chiffre ou lettre non-accentués par un '-'
                    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
                    error_reporting(E_ALL);
                    //Si fichier bon et déplacé, exécution ajout info base
                    if (move_uploaded_file($fichierUp. './' .$nomfichier )) {
                        $zip = new ZipArchive;
                        $result = $zip->open('./' . $nomfichier);
                        echo $result;
    Cette erreur apparait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    move_uploaded_file() expects exactly 2 parameters, 1 given
    Et mon fichier ne s'upload plus dans mon dossier.

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as mis un point au lieu d'une virgule.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut
    Ha oui.. Autant pour moi, ça faisait longtemps tiens.

    Bon ça me renvois le 1, donc ça fonctionne.

    Mais là mon fichier ne s'upload plus sur mon serveur en fait. Du coup ça décompresse rien du tout, vu qu'il n'y a rien à décompressé !

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Qu'est ce qui t'indique que le fichier n'est pas uploadé ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 99
    Points : 36
    Points
    36
    Par défaut
    Et bien qu'il n’apparaît pas dans le dossier sur le serveur (Je bosse en local pour le moment)

  20. #20
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Repars du code qui fonctionnait.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Décompresser des fichiers ZIP de plus de 35 Mo
    Par Général03 dans le forum Langage
    Réponses: 3
    Dernier message: 15/03/2010, 10h03
  2. Comment décompresser un fichier Zip ?
    Par binocle100 dans le forum Débuter
    Réponses: 4
    Dernier message: 04/03/2010, 08h22
  3. Compresser et Décompresser un fichier ZIP
    Par AAWOOPY56 dans le forum AIX
    Réponses: 1
    Dernier message: 16/02/2010, 14h32
  4. Comment décompresser un fichier zip
    Par michel71 dans le forum Débuter
    Réponses: 11
    Dernier message: 20/01/2010, 13h21
  5. Réponses: 1
    Dernier message: 10/02/2009, 17h28

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