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

Bibliothèques et frameworks PHP Discussion :

[Zip] Problème de création d'archives (Zip.lib.php)


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 11
    Par défaut [Zip] Problème de création d'archives (Zip.lib.php)
    Bonjour,

    Je suis entrain d'écrire un script PHP afin de compresser le contenu d'un dossier sur le serveur.
    concernant l'instanciation de la classe zipfile, j'ai aucun souci, mais dés que j'utilise la méthode addFile() de cette classe pour rajouter les fichiers presents dans mon dossier, j'ai aucun fichier zip de crée.

    et dés que je met en commentaire la méthode addFile(), je génére un fichier zip mais vide! (normal).

    Voici le code de mon script:
    <?php
    require("zip.lib.php");
    set_time_limit (1000);
    $fichier_zip = "test.zip";

    $rep = "dir/"; //le nom de mon dossier
    $path = opendir($rep);

    $zip= new zipfile();
    while ($f = readdir($path)) {
    if(is_file($rep.$f))
    {
    $fp = fopen ($rep.$f, 'r');
    $content = fread($fp,filesize($rep.$f));
    fclose($fp);

    echo "is file ".$f."<br>"; //je verifie la présence des fichiers dans $rep
    $zip->addFile($content,$rep.$f);

    }
    }

    $filezipped=$zip->file();
    $open = fopen($fichier_zip, "w");
    fwrite($open, $filezipped);
    fclose($open);
    ?>

    Je compte sur votre aide précieuse pour me guider car je suis perdu!!
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pour moi c'est logique qu'il ne te fasse rien.

    $zip->addFile($content,$rep.$f);
    il t'ajoute dans le zip $content et lui donne le nom $rep.$f.
    Or $rep.$f contient des slashes ( $rep = "dir/"; //le nom de mon dossier)
    et tu ne peux pas mettre de slashes dans un nom de fichiers (pas de \ / : * ? < > | je ois en oublier je pense)

    Essai en donnant un autre nom dans le addfile

  3. #3
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 11
    Par défaut
    Merci pour la remarque.
    je vais essayer ca tout de suite et je te tiens au courant!

    a toute,


  4. #4
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 11
    Par défaut
    Ta remarque est forcement constructive, mais le probléme reside encore malgré que j'ai changé ma boucle while par la suivante:

    while ($f = readdir($path)) {
    if(is_file($rep.$f))
    {
    $fp = fopen ($rep.$f, 'r');
    $content = fread($fp,filesize($rep.$f));
    fclose($fp);

    echo "is file ".$f."<br>";
    $zip->addFile($content,$f);

    }
    }

    ou $f est le nom du fichier present dans mon repertoire.


    Qu'est ce t'en pense?
    Autres remarques ou suggestion?

    A l'aide!

  5. #5
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 11
    Par défaut
    Autre question,
    Est ce qu'on est obligé de mettre la classe zip.lib.php sur le serveur ou elle est fournie d'office par phpmyadmin.
    si elle est fournie, on la trouve ou au niveau de la hierarchie du serveur!
    moi en tout cas j'utilise la version PHP Version 4.2.3.

    J'ai téléchargé la class zip.lib.php est je l'ai mise sur mon serveur web!

  6. #6
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 11
    Par défaut class zip.lib.php utilisée
    pour info, je vous mets la classe zip.lib.php que j'appel:

    <?php
    /* $Id: zip.lib.php,v 1.1 2004/02/14 15:21:18 anoncvs_tusedb Exp $ */
    // vim: expandtab sw=4 ts=4 sts=4:


    /**
    * Zip file creation class.
    * Makes zip files.
    *
    * Last Modification and Extension By :
    *
    * Hasin Hayder
    * HomePage : www.hasinme.info
    * Email : countdraculla@gmail.com
    * IDE : PHP Designer 2005
    *
    *
    * Originally Based on :
    *
    * http://www.zend.com/codex.php?id=535&single=1
    * By Eric Mueller <eric@themepark.com>
    *
    * http://www.zend.com/codex.php?id=470&single=1
    * by Denis125 <webmaster@atlant.ru>
    *
    * a patch from Peter Listiak <mlady@users.sourceforge.net> for last modified
    * date and time of the compressed file
    *
    * Official ZIP file format: http://www.pkware.com/appnote.txt
    *
    * @access public
    */
    class zipfile
    {
    /**
    * Array to store compressed data
    *
    * @var array $datasec
    */
    var $datasec = array();

    /**
    * Central directory
    *
    * @var array $ctrl_dir
    */
    var $ctrl_dir = array();

    /**
    * End of central directory record
    *
    * @var string $eof_ctrl_dir
    */
    var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";

    /**
    * Last offset position
    *
    * @var integer $old_offset
    */
    var $old_offset = 0;


    /**
    * Converts an Unix timestamp to a four byte DOS date and time format (date
    * in high two bytes, time in low two bytes allowing magnitude comparison).
    *
    * @param integer the current Unix timestamp
    *
    * @return integer the current date in a four byte DOS format
    *
    * @access private
    */
    function unix2DosTime($unixtime = 0) {
    $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);

    if ($timearray['year'] < 1980) {
    $timearray['year'] = 1980;
    $timearray['mon'] = 1;
    $timearray['mday'] = 1;
    $timearray['hours'] = 0;
    $timearray['minutes'] = 0;
    $timearray['seconds'] = 0;
    } // end if

    return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
    ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
    } // end of the 'unix2DosTime()' method


    /**
    * Adds "file" to archive
    *
    * @param string file contents
    * @param string name of the file in the archive (may contains the path)
    * @param integer the current timestamp
    *
    * @access public
    */
    function addFile($data, $name, $time = 0)
    {
    $name = str_replace('\\', '/', $name);

    $dtime = dechex($this->unix2DosTime($time));
    $hexdtime = '\x' . $dtime[6] . $dtime[7]
    . '\x' . $dtime[4] . $dtime[5]
    . '\x' . $dtime[2] . $dtime[3]
    . '\x' . $dtime[0] . $dtime[1];
    eval('$hexdtime = "' . $hexdtime . '";');

    $fr = "\x50\x4b\x03\x04";
    $fr .= "\x14\x00"; // ver needed to extract
    $fr .= "\x00\x00"; // gen purpose bit flag
    $fr .= "\x08\x00"; // compression method
    $fr .= $hexdtime; // last mod time and date

    // "local file header" segment
    $unc_len = strlen($data);
    $crc = crc32($data);
    $zdata = gzcompress($data);
    $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
    $c_len = strlen($zdata);
    $fr .= pack('V', $crc); // crc32
    $fr .= pack('V', $c_len); // compressed filesize
    $fr .= pack('V', $unc_len); // uncompressed filesize
    $fr .= pack('v', strlen($name)); // length of filename
    $fr .= pack('v', 0); // extra field length
    $fr .= $name;

    // "file data" segment
    $fr .= $zdata;

    // "data descriptor" segment (optional but necessary if archive is not
    // served as file)
    $fr .= pack('V', $crc); // crc32
    $fr .= pack('V', $c_len); // compressed filesize
    $fr .= pack('V', $unc_len); // uncompressed filesize

    // add this entry to array
    $this -> datasec[] = $fr;

    // now add to central directory record
    $cdrec = "\x50\x4b\x01\x02";
    $cdrec .= "\x00\x00"; // version made by
    $cdrec .= "\x14\x00"; // version needed to extract
    $cdrec .= "\x00\x00"; // gen purpose bit flag
    $cdrec .= "\x08\x00"; // compression method
    $cdrec .= $hexdtime; // last mod time & date
    $cdrec .= pack('V', $crc); // crc32
    $cdrec .= pack('V', $c_len); // compressed filesize
    $cdrec .= pack('V', $unc_len); // uncompressed filesize
    $cdrec .= pack('v', strlen($name) ); // length of filename
    $cdrec .= pack('v', 0 ); // extra field length
    $cdrec .= pack('v', 0 ); // file comment length
    $cdrec .= pack('v', 0 ); // disk number start
    $cdrec .= pack('v', 0 ); // internal file attributes
    $cdrec .= pack('V', 32 ); // external file attributes - 'archive' bit set

    $cdrec .= pack('V', $this -> old_offset ); // relative offset of local header
    $this -> old_offset += strlen($fr);

    $cdrec .= $name;

    // optional extra field, file comment goes here
    // save to central directory
    $this -> ctrl_dir[] = $cdrec;
    } // end of the 'addFile()' method


    /**
    * Dumps out file
    *
    * @return string the zipped file
    *
    * @access public
    */
    function file()
    {
    $data = implode('', $this -> datasec);
    $ctrldir = implode('', $this -> ctrl_dir);

    return
    $data .
    $ctrldir .
    $this -> eof_ctrl_dir .
    pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk"
    pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall
    pack('V', strlen($ctrldir)) . // size of central dir
    pack('V', strlen($data)) . // offset to start of central dir
    "\x00\x00"; // .zip file comment length
    } // end of the 'file()' method


    /**
    * A Wrapper of original addFile Function
    *
    * Created By Hasin Hayder at 29th Jan, 1:29 AM
    *
    * @param array An Array of files with relative/absolute path to be added in Zip File
    *
    * @access public
    */
    function addFiles($files /*Only Pass Array*/)
    {
    foreach($files as $file)
    {
    if (is_file($file)) //directory check
    {
    $data = implode("",file($file));
    $this->addFile($data,$file);
    }
    }
    }

    /**
    * A Wrapper of original file Function
    *
    * Created By Hasin Hayder at 29th Jan, 1:29 AM
    *
    * @param string Output file name
    *
    * @access public
    */
    function output($file)
    {
    $fp=fopen($file,"w");
    fwrite($fp,$this->file());
    fclose($fp);
    }



    } // end of the 'zipfile' class
    ?>

Discussions similaires

  1. [Prob] Création d'archive zip
    Par hannibal.76 dans le forum Langage
    Réponses: 2
    Dernier message: 19/06/2011, 11h19
  2. [WD15] Problème à la création d'un ZIP
    Par FreeDo dans le forum WinDev
    Réponses: 15
    Dernier message: 10/06/2011, 14h10
  3. Plusieurs problèmes avec copie d'archives zip
    Par mithrendil dans le forum C#
    Réponses: 3
    Dernier message: 27/06/2010, 22h46
  4. [unzip] Problème pour décompresser une archive zip
    Par lammouch dans le forum MATLAB
    Réponses: 11
    Dernier message: 03/04/2008, 17h56
  5. [XML][DOM][ZIP] Problème de lecture dans un zip
    Par gocin dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 04/04/2007, 11h41

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