Sujet : Pb de dezipage lors utilisation de la classe panierdefichiers

Bonjour,
j'utilise votre classe dans le cadre d'une gestion de photo également et aujourd'hui j'ai le probléme suivant :

Impossible d'ouvrir le dossier zippé avec winzip alors que sur d'autres sites utilisant la même classe je n'ai pas ce probléme et j'ai beau cherché je ne vois pas d'où pourrait venir le probléme .

J'ai  consulté le site phpconcept pour la lib pclzip.lib.php mais je n'ai pas trouvé plus d'info si ce n'est dans la FAQ qui précise également qu'il peut y avoir des problémes avec win zip antérieur à la version 8. Or visiblement cela fonctionne quand même puisque c'est le premier site sur lequel je rencontre le pb.

J'ai également vérifié si le zip construit côté serveur avant de le télécharger était correct  et effectivement si je le rapatrie par un ftp pas de probléme pour le dezipper avec win zip. Ceci pourrait laisser penser que le pb se situe dans la deuxiéme partie de la fonction creerArchive() à partir de la lecture binaire de l'archive mais je ne vois pas où???

Voici les erreurs renvoyées par les différents utilitaires pour dezipper
L'erreur renvoyé par win zip est :
debut du répertoire central non trouvé .
Si j'essaye de l'ouvrir avec Quick zip celui ci veut bien l'ouvrir mais indique également une erreur :
Error in zip structure
et enfin  j'ouvre et dezip tout sans pb avec WinRar

Mon explication est un peu longue et j'espére avoir été à peu prés clair mais là je bute vraiment sur le pb alors si vous avez une idée je suis preneur....

J'en profite également pour vous féliciter pour votre travail et pour la charte graphique du site (qui de plus respectent les standarts!!)

cordialement

Re : Pb de dezipage lors utilisation de la classe panierdefichiers

Bonjour et bienvenue smile

Je pense avoir une idée. C'est un problème que j'ai rencontré et qui m'a plutôt contrarié n'en trouvant pas la cause. Finalement, j'ai depuis fini par trouver. C'est un truc plutôt bête...

Il se trouve que les fichiers que j'écris sont encodés en UTF-8. J'ai, dans le lisezmoi.txt de l'archive d'AlBulles, mis un paragraphe quant à l'édition de tels fichiers. Je te le remets ici, car il n'est pas présent dans l'archive de la classe (il faudra que je le mette d'ailleurs !) :

Tous les fichiers php que vous trouverez dans ce projet sont encodés au
format UTF-8. Ainsi, VOUS NE DEVEZ EN AUCUN CAS LES EDITER AUTREMENT QU'EN
UTF-8 ! Si par mégarde vous en ouvrez un, ne l'enregistrez pas tant que votre
logiciel n'a pas été configuré pour enregistrer ses fichiers dans ce format ;
vous risquer d'endommager les fichiers et d'avoir alors des erreurs lors de
leur exécution.

    DE PLUS, en raison de disparités dans le format UTF-8, tous les éditeurs
ne sont pas recommandés pour effectuer cette tâche (le format UTF-8 est décliné
en deux versions, dont l'une ne convient pas aux serveurs PHP et peut provoquer
des erreurs). Les éditeurs que je vous recommande sont les suivants :

    - Unired : http://unired.sourceforge.net/, pour Windows uniquement.
    - Jext : http://jext.sourceforge.net/, multi plates-formes (écrit en Java).
    - Scite : http://www.scintilla.org/, linux et Windows (mon préféré ;-)).
        Attention : avec Scite, deux formats d'encodage UTF-8 sont disponibles !
            L'UTF-8 et l'UTF-8 Cookie. C'est ce dernier que vous devrez
            utiliser pour éditer correctement les fichiers, car l'autre
            ajoute un caractère non visible en tout début de fichier.
    - Vim : http://www.vim.org/, multi plates-formes.
    - Emacs : http://www.gnu.org/software/emacs/, multi plates-formes.
   
    (Pour les plus curieux d'entres vous, voici un explication beaucoup plus
complète que ces quelques lignes que je viens d'écrire :
http://openweb.eu.org/articles/jeux_caracteres/ )

Il se peut donc que vous ayez corrompu les fichiers en les éditant avec le mauvais format de fichier. Ce qui fait que 2-3 caractères malveillants et non visibles se glissent en début de fichier. L'apparition des ces caractères provoque la corruption des archives lors de leur envoi via le navigateur. L'envoi est fait, après un fopen sur le fichier zip généré, par un echo. Or, cette dernière commande envoie avec le fichier ces fameux caractères, ce qui fait que l'archive que l'on récupère est corrompue. Et ce qui explique aussi que l'archive sur le serveur FTP soit elle, toujours bonne.

La solution la plus simple consiste à repartir des fichiers originaux et de ne les éditer qu'avec un éditeur qui prenne en charge l'UTF-8 (prenez Scite, il fonctionne à merveille). La solution alternative consiterait à ouvrir les fichiers avec un éditeur qui permettrait de voir ces caractères pour les supprimer. Mais je ne me souviens plus comment faire big_smile...Je vous conseille donc vivement la 1ère solution.

J'espère seulement que c'est bien là votre problème parce que sinon, ça peut être long à trouver !

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

3 Dernière modification par pompom (12/10/2005 10h41m11s)

Re : Pb de dezipage lors utilisation de la classe panierdefichiers

Bonjour et merci pour la réponse ,
mais ce n'est pas ça??? sad
J'ai  essayé également avec scite (utf8 cookie) mais j'ai toujours le même probléme
Ceci dit si je n'avais pas eu ce pb précedemment alors que j'avais modifié dans mon éditeur (Zend) la class pour l'adapter à mon script.
Donc si il y avait eu ce pb d'encodage je pense qu'il aurait du se révéler à ce moment.
La seule chose qui ait changé c'est l'hébergeur??? et quelque lignes dans la class

J'ai essayé d'utiliser directement la class sans rien touché pour voir si cela passait mais il y a un bug sur la ligne
71 je crois par rapport à la déclaration du private pour le nb fichier max donc je n'ai rien pu voir ... (sans doute du au fait que j'utilise la classe de façon isolée ???)
dommage ...

Je viens d'essayer avec stuffit expander pas de pb la decompression se déroule nickel...
Je suis dans le flou complet tongue

une autre idée???

Re : Pb de dezipage lors utilisation de la classe panierdefichiers

Aïe, quel est ce bogue sur la ligne 71 ? Quelle est l'erreur retournée ? C'est tout de même bizarre sur une déclaration...

Vous me dites utiliser Zend. Je l'utilise aussi et il est parfait. L'utilisation en UTF-8 ne pose aucun problème avec lui ; vous pouvez donc l'utiliser sans crainte. Vous dites avoir changé quelques lignes dans la classe. Pourriez-vous me détailler ces changements ?

j'utilise la classe de façon isolée

C'est-à-dire ?

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : Pb de dezipage lors utilisation de la classe panierdefichiers

bug :
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/httpd/vhosts/www.defimmo.org/web/panierdefichiers.class.php on line 71

Zend m'indique également une erreur sur cette déclaration
Je comprend pas bien non plus ; j'ai vérifié sui par inadvertance je n'avais pas supprimé une } quelconque mais non...

Ensuite isolée veut simplement dire que j'utilise uniquement la classe en dehors de albulles (bien evidemment avec la lib pclzip.lib).

Pour les modifs : rein de bien méchant
Justement je passe en commentaire la déclaration qui pose pb puisque j'en ai pas besoin
Et ensuite modifiactaion de la methode creerArchive(ceci dit le dezippage posé pb avant que je fasse cette modif)

function CreerArchive( $sNomFichier, $bEcrireSeulement = false )
    {

        $sFichierZip = $sNomFichier.'.zip';
        
        // inclusion de la librairie de compression zip    
        require_once( COMPRESS_LIB );
        
        // creation de l'objet du fichier zip
        $oZip = new PclZip( $sFichierZip );
        
        // ajout des fichiers au zip et ecriture sur le disque
        if( $oZip->create( $_SESSION[NOM_PANIER_SESSION],PCLZIP_OPT_REMOVE_PATH,'bigPhotosEvenements',PCLZIP_OPT_ADD_PATH,'defimmo') == 0 )
            die( "Erreur : ".$oZip->errorInfo(true) );
        
        // destruction objet zip
        unset( $oZip );    
        
        if( $bEcrireSeulement === false )
        {
        
            // lecture binaire de l'archive
            $fpHandle = fopen( $sFichierZip, 'rb' );
            $sArchive = fread( $fpHandle, filesize( $sFichierZip ) );
            fclose( $fpHandle );
            
            // suppression de l'archive
            unlink( $sFichierZip );
            
            // chargement des entetes HTTP pour l'envoi de l'archive
            header("Content-type: application/octet-stream");
            header("Content-disposition: attachment; filename=$sNomFichier.zip");
            
            // envoi au navigateur
            echo $sArchive;
            
        }
        
    }

voila voila smile

Re : Pb de dezipage lors utilisation de la classe panierdefichiers

En fait pour l'erreur, aprés vérif, c'est l'utilisation de private qui pose pb valable en php5 mais pas en php4 pas totalement objet.

Re : Pb de dezipage lors utilisation de la classe panierdefichiers

Effectivement, vous utilisez la classe en version PHP5 sur un serveur PHP4. Ca ne fonctionnera donc jamais wink

Deux solutions : passer sur un serveur PHP5 ou adapter la classe pour qu'elle tourne sur un serveur PHP4, ce qui sera nettement plus rapide !

Pour la rendre compatible, il faut donc remplacer le mot clé private de l'attribut par le mot var et remplacer le nom du constructeur __construct par le nom de la classe PanierDeFichiers. C'est tout smile

Au passage, il me semble que le bout de code que vous m'avez mit provient de la version 0.4 de la classe. Me trompe-je ? Si tel est le cas, la version 0.5 est sortie et permet de disposer de la taille du fichier lors de l'envoi pour que le client voit le temps restant de téléchargement.

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : Pb de dezipage lors utilisation de la classe panierdefichiers

OK
autant pour moi et désolé de t'avoir solicité sur quelque chose de simple
En fait je n'avais pas envisagé ce cas là et finalement c'est l'histoire du private qui m'a fait pensé au pb
hormis que je n'avais pas pensé au constructeur hmm hmm Merci pour le coup de main!

Bon le pb est réglé à présent .
Par contre si je peux me permettre je pense qu'il faudrait précisé dans la classe que celle ci est développée pour php 5 parce que une autre personne qui ne réagira pas tout de suite au private(comme moi par ex ....) va avoir le même type de pb

encore merci pour le temps passé

cordialement

Re : Pb de dezipage lors utilisation de la classe panierdefichiers

Je t'en prie, il n'y aucun problème, je suis là pour ça smile Et puis un problème peut être simple sans pour autant avoir une réponse évidente wink.

Me voilà rassuré, j'avais peur que ce bogue me poursuive...il m'a déjà bien pris la tête.

Et puis tu as raison, je vais préciser que la classe est en PHP5 dans la classe elle-même. Je l'ai précisé sur le site, dans la liste des ressources PHP, mais c'est bien le seul endroit où je le précise après vérification !

Bon courage pour la suite et n'hésite surtout pas à poser d'autres questions si besoin, le forum est fait pour !

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW