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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Compresser plusieurs fichier sur un ZIP


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Points : 81
    Points
    81
    Par défaut Compresser plusieurs fichier sur un ZIP
    Bonjour,

    J'ai un script qui permet d'ajouter des fichiers sur un zip.
    Mon problème est qu'une fois que le zip est créé quand je l'ouvre il se pointe sur le répertoire racine.
    Quand je regarde sur les propriété du zip, je vois qu'il a ajouté les fichiers .
    Je vous ai ajouté une capture d’écran de ce que j'ai et la fonction.
    Je demande de l'aide pour résoudre ce problème,

    Merci d'avance
    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
    /* creates a compressed zip file */
    function create_zip($files = array(),$destination = '',$overwrite = false, $zip) {
        //if the zip file already exists and overwrite is false, return false
        if(file_exists($destination) && !$overwrite) { return false; }
        //vars
        $valid_files = array();
        //if files were passed in...
        if(is_array($files)) {
            //cycle through each file
            foreach($files as $file) {
                //make sure the file exists
                if(file_exists($file)) {
                    $valid_files[] = $file;
                }
            }
        }
        //if we have good files...
        if(count($valid_files)) {
            //create the archive
            if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
                return false;
            }
            //add the files
            foreach($valid_files as $file) {
                $zip->addFile($file,$file);
            }
            //close the zip -- done!
            $zip->close();
     
            //check to make sure the file exists
            return file_exists($destination);
        }
        else
        {
            return false;
        }
    }
    Nom : capture1.png
Affichages : 471
Taille : 107,1 Ko

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Je n'ai pas testé mais essayez peut-être de spécifier correctement le nom du fichier dans ->addFile() grâce à la fonction basename()

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Remaplacer ceci :
    $zip->addFile($file,$file);
    // par ceci :
    $zip->addFile($file, basename($file));

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Points : 81
    Points
    81
    Par défaut Bonjour et merci pour ta proposition
    Je l'ai déjà testé mais c'est toujours le même problème
    J'ai essayer avec la commande Zip de linux et je remarque qu'il faut faire cd sur le répertoire des fichiers.
    J'ai fait le même manip avec Shell-exc() de PHP cela fonctionne mais j'aimerai savoir pourquoi quand je donne le lien du fichier à cet script a partir de document root cela ne fonctionne pas.

    Merci,

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Je vous déconseille l'utilisation de $_SERVER['DOCUMENT_ROOT']

    Il s'agit d'une variable Apache, si vous utilisez PHP-CLI (Command Line Interface, donc via une console plutôt qu'un explorateur) cette variable n'existe pas.
    Il vaut mieux définir une constante de cette façon :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    define('BASE_PATH', dirname(__FILE__).'/'); // si le fichier se trouve là où est le document_root
    define('BASE_PATH', dirname(__FILE__).'/../path/to/document/root/'); // s'il est ailleurs, on peut renseigner le chemin comme on le fait habituellement

    IMPORTANT: il est "interdit" d'avoir 2 define() de la même constante, c'est ici à titre d'exemple que je le met !


    Je ne pense pas que ce problème soit votre cas car vous n'avez jamais parlé d'exécuter le script en ligne de commande mais on ne sait jamais ^^

    Avez-vous vérifiez que votre array "$valid_files" contenait bien quelque chose ?

  5. #5
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Rebonjour,

    J'ai testé votre code... A part une toute petite adaptation (car je trouve -c'est juste mon avis- que $zip ne devrait pas être fourni à la fonction mais créé directement à l'intérieur)
    tout fonctionne bien. Faites attention de TOUJOURS donner le chemin d'accès COMPLET des fichiers (que ce soit les fichiers à compresser ou le fichier de destination).

    Vous trouverez la démo et le code source ici : http://tests.pierre-roels.com/zip.php

    EDIT: il est relativement incorrect d'écrire la fonction comme vous l'avez fait. Les variables requises doivent toujours être situées AVANT les variables prédéfinies. Vous auriez donc du écrire ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // $zip est requis alors que tout le reste ne l'est pas, $zip doit donc être le plus à gauche possible.
    function create_zip($zip, $files = array(), $destination = '', $overwrite = false) {
     // instructions
    }

    D'autre part, $files & $destination devraient également être requis et non optionnel comme vous l'avez écrit. Si vous souhaitez forcer le fait que $files doit être un array, il ne faut pas écrire $files = array() mais ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function create_zip($zip, array $files, $destination = '', $overwrite = false) {
       // ici $files est requis et n'accepte que des array !
    }

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Points : 81
    Points
    81
    Par défaut Mille Merci!!!!!
    Je vois mieux d'ou vient le problème, c’était bien le $_SERVER['DOCUMENT_ROOT'].
    Merci pour tes conseils pour le passage des paramètres et le lien aussi.

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

Discussions similaires

  1. Upload parallelle de plusieurs fichiers sur même domain.
    Par Fabouney dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 05/10/2009, 12h05
  2. Supprimer plusieurs fichier sur FTP
    Par DevPerl dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 16/09/2007, 23h38
  3. Compresser plusieurs fichiers avec GZip
    Par Fly3R dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/09/2007, 13h54
  4. exporter cellules de plusieurs fichiers sur un seul fichier
    Par sapeur37 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/11/2006, 09h46
  5. [C#] Compresser plusieurs fichiers avec GZipStream, help
    Par TheParadoX dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/08/2006, 10h19

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