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] Création d'un fichier zip avec zip.lib.php corrompue


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 47
    Points
    47
    Par défaut [Zip] Création d'un fichier zip avec zip.lib.php corrompue
    Bonjour à toutes et à tous,

    J'utilise la classe zip.lib.php.

    J'ai un panier avec des noms de fichiers (référence à des images), un catalogue en quelque sorte (un album).
    Les internautes sélectionnent les photos puis peuvent télécharger leur panier.
    Jusque là OK, le panier s'affiche correctement.
    Mais quand je télécharge depuis le net ce panier, l'archive est corrompue, alors qu'en local avec Wamp, ça marche nickel !

    Depuis le web, j'arrive à compresser un fichier, mais lorsque je veux en compresser 2, mon archive est indiquée comme endommagée ou corrompue !

    Petite précision, le même script fonctionne sur Wamp et sur un espace OVH mais pas sur un espace Free !!!!!!
    Le problème est là, mais comment le contourner ?

    Comment puis je faire ?

    Merci pour vos réponses,
    Amicalement,
    Thierry.

    PS: je continue mes investigations et je vous tiens au courant...

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    En PHP, il y a également d'excellentes extensions, officielles et parfaitement fonctionnelles, notamment Zip et le tout nouveau phar. Je te recommande de te tourner vers ces deux extensions plutôt que vers des bibliothèques "amateur".
    cf. ici : http://php.developpez.com/cours/?pag...es#compression

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    J'ai fait ceci:
    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
    require_once("zip.lib.php");
     
    $zip = new zipfile();
     
    $photo1 = "IMG_1358.JPG";
    $photo2 = "IMG_1359.JPG";
     
    $fp = fopen($photo1,'r') ; //on ouvre le fichier en lecture seule
    $contenu = fread($fp, filesize($photo1)) ; //on enregistre le contenu
    fclose($fp) ; //on ferme fp
    $zip->addFile($contenu, $photo1); //on ajoute le fichier
     
    $fp = fopen($photo2,'r') ; //on ouvre le fichier en lecture seule
    $contenu = fread($fp, filesize($photo2)) ; //on enregistre le contenu
    fclose($fp) ; //on ferme fp
    $zip->addFile($contenu, $photo2); //on ajoute le fichier
     
    $archive = $zip->file() ; //on associe l'archive
     
    header('Content-Type: application/x-zip') ; //on détermine les en-tête
    header("Content-Disposition: attachement; filename=archive.zip") ;
    header("Content-length: ".strlen($archive));
    echo $archive;
    Mais j'ai toujours mon archive corrompu !
    Je ne comprends pas ce qui se passs !
    Merci
    Thierry

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    essayes en enlevant la ligne
    header("Content-length: ".strlen($archive));

    moi c'est ce que j'ai fait et du coup j'arrive a ouvrir l'archive avec winrar , par contre ca marche toujours pas avec l'outil de windows ou 7zip

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    J'ai essayé dans un premier temps sans header("Content-length: ".strlen($archive));
    mais le problème est toujours le même !

    Par contre, je suis parti sur une autre solution fonctionnelle, je créé l'archive, puis je redirige avec header location:... vers une page avec le lien vers l'archive.
    Ensuite je fais un unlink en cliquant sur fermer.

    Tout bête, mais ça marche,
    Merci tout de même du coup de main.
    Amicalement,
    Thierry

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Cette solution n'est malheureusement pas optimale. Que se passe-t-il si plusieurs utilisateurs viennent en même temps ?
    Voici un exemple avec tous les headers nécessaires : http://php.developpez.com/faq/index...._forcedownload

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 47
    Points
    47
    Par défaut
    Merci pour l'infos,
    si plusieurs internautes souhaitent faire un téléchargement simultané, j'ai prévu de nommé le fichier archive comme ceci Date("YMdHiss").
    Ce serait pas de bol pour moi si deux internautes déclenchent une archive à la même seconde prêt !!!!
    Il faut replacer dans le contexte également:
    Ce petit outil de création d'archive est pour ma famille qui consulte notre album et qui souhaitent télécharger quelques photos mises dans un panier.
    Oualà, peut-être ai je commis des erreurs quelques parts

    Merci

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Pour simplifier ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    require_once("zip.lib.php");
     
    $zip = new zipfile();
     
    $photo1 = "IMG_1358.JPG";
    $photo2 = "IMG_1359.JPG";
     
    $zip->addFile(file_get_contents($photo1), $photo1); //on ajoute le fichier
    $zip->addFile(file_get_contents($photo2), $photo2); //on ajoute le fichier
     
    $archive = $zip->file() ; //on associe l'archive
    Puis quelque chose dans le style de :
    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
     //
    // Gestion du cache
    //
    header('Pragma: public');
    header('Last-Modified: '.gmdate(DATE_RFC1123));
    header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
     
    //
    // Informations sur le contenu à envoyer
    //
    header('Content-Tranfer-Encoding: none');
    header('Content-Length: '.CFG_FILESIZE);
    header('Content-MD5: '.base64_encode(CFG_FILE_MD5));
    header('Content-Type: application/octetstream; name="'.CFG_SEND_FILENAME.'"');
    header('Content-Disposition: attachement; filename="'.CFG_SEND_FILENAME.'"');
     
    //
    // Informations sur la réponse HTTP elle-même
    //
    header('Date: '.gmdate(DATE_RFC1123, time()));
    header('Expires: '.gmdate(DATE_RFC1123, time()+1));
    header('Last-Modified: '.gmdate(DATE_RFC1123, time()));

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 47
    Points
    47
    Par défaut
    Merci, je vais essayer cela et je te tiens au courant.
    Thierry

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

Discussions similaires

  1. création d'un fichier pdf avec iText et jsf
    Par paolo2002 dans le forum JSF
    Réponses: 9
    Dernier message: 08/12/2008, 13h54
  2. création d'un fichier pdf avec iText et jsf
    Par paolo2002 dans le forum Documents
    Réponses: 1
    Dernier message: 25/06/2008, 10h10
  3. Création d'un fichier .bmp avec PrintWindow
    Par Irken dans le forum Windows
    Réponses: 8
    Dernier message: 05/09/2007, 18h03
  4. création d'un fichier excel avec ADO
    Par sony351 dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/02/2007, 15h54
  5. [JDOM] Création d'un fichier xml avec jdom
    Par fabricew59 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 09/08/2006, 11h17

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