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 :

Zipper le contenu d'un repertoire stocké dans mon serveur.


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Zipper le contenu d'un repertoire stocké dans mon serveur.
    Bonjour à tous!

    Merci pour ce forum.

    J'ai besoin d'aide... je débute dans le monde php.

    Voila je voudrais depuis une page web aller "à la demande" zipper le contenu d'un repertoire stocké dans mon serveur.

    Si on peut me mettre sur la bonne piste

    Merci

    Bob

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour faire ça, il faut faire deux choses : lire le contenu d'un dossier et construire une archive zip.

    Quel est le point qui te pose problème ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Hello,

    les deux...
    je debute
    je sais lire le contenu d'un fichier mais pas le contenu d'un repertoire
    ensuite le gros morceau c'est faire ce zip ( le stocké dans un autre repertoire, archiver quoi...)

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    http://php.net/manual/fr/function.scandir.php

    fonction scandir
    En lisant la doc, une question à se poser : "Ton répertoire a-t-il des fichiers sur un seul niveau ? Ou bien tu ne sais pas d'avance s'il n'a pas des tas de sous-dossiers imbriqués ?"
    Selon la réponse, tu utiliseras un code simple... ou une fonction récursive. (mais la bonne nouvelle, c'est que la fonction complexe est fournie dans les exemples du manuel, tu n'es pas tout seul !).

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Donc pour faire simple :
    Commences par écrire un script qui liste les fichiers de ton dossier.

    Dans un autre script, teste le fonctionnement de ZipArchive : http://php.net/manual/fr/zip.examples.php

    Une fois que ton script de lecture fonctionne, tu peux incorporer le système de Zip en remplaçant l'endroit où tu écris le nom du fichier par un appel à ZipArchive::addFile.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Hello
    Merci à Vous!!

    Etape 1:

    OK

    J'ai réussi à afficher mes fichiers du dossier (qui d'ailleurs est sur un niveau)

    Array ( [0] => . [1] => .. [2] => fichier_log.log [3] => fichier_log.log.1 [4] => fichier_log.log.2 )


    Maintenant, il faut que je zipe et que je stocke le zip dans un repertoire dédier :=)

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Petite étape intermédiaire : là tu affiches directement le retour de scandir. Essaye de faire un bout de script avec une boucle qui affiche les entrées une par une, en filtrant "." et "..".

  8. #8
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    euuhhh moi pas sav les boucles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $dir    = '..\log';
    $files = scandir($dir);
     
     
    print_r($files);
     
    ?>
    Pour mon zip voici ce que j'ai codé... comment recuperer le contenu de $files ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <php?
    $zip = new ZipArchive();
    $filename='..\Ziplog';
     
    $zip->open($filename, ZipArchive::CREATE);
    $zip->addFile("$files");
    $zip->close();
    ?>
    => j'ai une erreur...

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par BobbyLaPointe38 Voir le message
    Pour mon zip voici ce que j'ai codé... comment recuperer le contenu de $files ???
    Avec une boucle (d'où ma remarque sur l'étape intermédiaire ) PHP : Le tutoriel pour grands débutants pressés - IV-4. La boucle foreach

    Donc pour parcourir ton tableau, tu utilises une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $dir    = '..\log';
    $files = scandir($dir);
     
    foreach ($files as $file) {
        // on filtre "." et ".." parce que ce ne sont pas des fichiers 
        if ($file != '.' && $file != '..') {
            echo "Fichier : ".$file."<br>";
        }
    }
    Et pour construire l'archive Zip, tu l'ouvres avant la boucle, tu la remplis dans la boucle et tu la fermes après la boucle.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Encore moi...
    là je galère bien j'ai trouvé un code qui semble bon mais je n'arrive pas à le faire tourner
    En gros rien ne se passe

    Voila:

    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
    <?php
     
     
     
     
     
     
    function createZip($dirSource,$dirBackup, $reload = null, $oZip = null) {
        // si le dossier existe
        if ($dir = opendir($dirSource)) {
            // on créait le chemin du dossier final
            $pathZip = substr($dirBackup, 0, -1).'.zip';
    //si la fonction est lancé pour la première fois on créait l'objet
            if(!$reload){
                $oZip = new ZipArchive;
                $oZip->open($pathZip, ZipArchive::CREATE);
            }// sinon on récupère l'object passé en param
            else{
                $oZip = $oZip;
            }
     
            while (($file = readdir($dir)) !== false) {
                // on évite le dossier parent et courant
                if($file != '..'  && $file != '.') {
                    // Si c'est un dossier on relance la fonction
                    if(is_dir($dirSource.$file)) {
                        createZip($dirSource.$file.'/', $dirBackup.$file.'/', 1, $oZip);
                    }// sinon c'est un fichier donc on l'ajoute Ã* l'archive
                    else {
                        $oZip->addFile($dirSource.$file);
                    }
                }
            }
            // on ferme l'archive
            if(!$reload){
                return $oZip->close();
            }
        }
    }
     
    $nom_archive = date("j-m-Y_G-i");
    echo $nom_archive;
    createZip('/log','/Zip'.$nom_archive.'/');

    ?>

  11. #11
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Waw je galère vraiment, je ne comprends pas pourquoi cela ne fonctionne pas.
    Pas de message d'erreur.
    Pas de traces de mon Zip dans le répertoire destination.
    Faut il activer une bibliothèque?
    Ais je un problème avec des droits?
    SOS

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour vérifier si ton système d'archive fonctionne, tu peux tester le script d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $zip = new ZipArchive();
    $filename = "./test.zip";
     
    if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
        exit("Impossible d'ouvrir le fichier <$filename>\n");
    }
     
    $zip->addFromString("test.txt", "#1 Ceci est une chaîne texte.\n");
     
    echo "Nombre de fichiers : " . $zip->numFiles . "\n";
    echo "Statut :" . $zip->status . "\n";
    $zip->close();
    ?>
    Normalement, ça devrait te créer un zip avec un fichier texte dedans.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Salut

    Merci pour ton aide
    Voici ce que j'ai:

    FatalThrowableError in Logs.php line 7:
    Parse error: syntax error, unexpected '$zip' (T_VARIABLE)

    ma ligne 7 :
    #code
    $zip->open($filename, ZipArchive::CREATE)!==TRUE)

  14. #14
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Quand tu as une erreur "Unexpected <quelque chose>", en général, ça veut dire qu'il manque quelque chose ou qu'il y a quelque chose en trop juste avant (typiquement un point-virgule ou une parenthèse)
    Donc il faudrait voir le script avant la ligne 7.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Hello

    C'est OK now avec ton code
    Nombre de fichiers : 1 Statut :0

    Par contre mon code ne marche pas

    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
     
     
    <?php
     
    function createZip($dirSource,$dirDestination, $reload = null, $oZip = null) {
        // si le dossier existe
        if ($dir = opendir($dirSource)) {
            // on créait le chemin du dossier final
            $pathZip = substr($dirDestination, 0,-1).'.zip';//si la fonction est lancé pour la première fois on créait l'objet
     
            if(!$reload){
              echo " ".$pathZip."<br>";
                $oZip = new ZipArchive;
                $oZip->open($pathZip, ZipArchive::CREATE);
            }// sinon on récupère l'object passé en param
            else{
                $oZip = $oZip;
            }
     
            while (($file = readdir($dir)) !== false) {
                // on évite le dossier parent et courant
                if($file != '..'  && $file != '.') {
     
                    // Si c'est un dossier on relance la fonction
     
                        echo "add zip ".$file."<br>";
                        $oZip->addFile($dirDestination.$file);
     
                }
            }
            // on ferme l'archive
            echo "add zip ".$file."<br>";
                return $oZip->close();
     
        }
    }
     
    $nom_archive = date("j-m-Y_G-i");
     
    createZip('C:/DATA/log','C:/DATA/RepZip/',null,null);
    ?>

    Voici ce que me remonte

    mes "echo"

    C:/DATA/RepZip.zip
    add zip log.log
    add zip log.log.1
    add zip log.log.2
    add zip

    Pas de zip crée

  16. #16
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Si tous tes fichiers sont dans le même dossier, on peut faire plus simple en mixant les deux bouts de codes qui fonctionnent :
    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
    <?
    $dir    = '..\log'; // mettre le bon dossier
    $files = scandir($dir);
     
    $zip = new ZipArchive();
    $zipName = "./logs.zip"; 
     
    if ($zip->open($zipName, ZipArchive::CREATE)!==TRUE) {
        exit("Impossible d'ouvrir le fichier <$zipName>\n");
    }
     
    foreach ($files as $file) {
        // on filtre "." et ".." parce que ce ne sont pas des fichiers 
        if ($file != '.' && $file != '..') {
    		if ($zip->addFile($file)) {
    			echo "Fichier : ".$file." ajouté !<br>";
    		} else {
    			echo "Problème sur l'ajout du fichier ".$file."<br>"; 
    		}
        }
    }
     
    echo "Nombre de fichiers : " . $zip->numFiles . "\n";
    echo "Statut :" . $zip->status . "\n";
    $zip->close();

  17. #17
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    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
     
     
    <?php
     
    $dir    = 'C:\DATA\log'; // mettre le bon dossier
    $files = scandir($dir);
    $nom_archive = date("j-m-Y_G-i");
    $zip = new ZipArchive();
    $zipName = "C:/DATA/RepZip/Log_.$nom_archive.zip"; 
     
    if ($zip->open($zipName, ZipArchive::CREATE)!==TRUE) {
        exit("Impossible d'ouvrir le fichier <$zipName>\n");
    }
     
    foreach ($files as $file) {
        // on filtre "." et ".." parce que ce ne sont pas des fichiers 
        if ($file != '.' && $file != '..') {
        if ($zip->addFile($file)) {
          echo "Fichier : ".$file." ajouté !<br>";
        } else {
          echo "Problème sur l'ajout du fichier ".$file."<br>"; 
        }
        }
    }
     
    echo "Nombre de fichiers : " . $zip->numFiles . "\n";
    echo "Statut :" . $zip->status . "\n";
    $zip->close();
     
    ?>
    à T0:

    J'ai le repertoire source (..\Log) qui contient:

    fichier log.log
    fichier log.log.1
    fichier log.log.2

    Apres lancement script rien dans le repertoire destination (..\RepZip)

    Résultat:

    Problème sur l'ajout du fichier log.log
    Problème sur l'ajout du fichier log.log.1
    Problème sur l'ajout du fichier log.log.2
    Nombre de fichiers : 0 Statut :0

  18. #18
    Membre à l'essai
    Homme Profil pro
    Padawan PHP
    Inscrit en
    Mars 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Padawan PHP

    Informations forums :
    Inscription : Mars 2018
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    C'est bon j'ai résolu mon problème.
    Mauvaise utilisation de addFile.
    J'avais :
    $zip->addFile($file)

    Il fallait faire
    $zip->addFile('chemin path/ fichier')

    Voilà voilou

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affiche le contenu d'un constante stocké dans une variable
    Par Alain Defrance dans le forum Langage
    Réponses: 5
    Dernier message: 07/07/2008, 10h07
  2. Réponses: 1
    Dernier message: 04/04/2008, 10h08
  3. Affichage en tmp réel du stock dans mon formulaire !
    Par smysted dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/11/2007, 10h15
  4. Réponses: 9
    Dernier message: 04/05/2007, 12h04
  5. Contenu d'un champ tronqué dans mon input box
    Par Marmot dans le forum ASP
    Réponses: 2
    Dernier message: 27/10/2004, 14h30

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