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 :

Problème Liste ZIP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Problème Liste ZIP
    Bonjour,
    Voilà j'ai un petit soucis avec la confection de Zip.
    Je créé dynamiquement un zip avec plusieurs fichiers ( une trentaine ) que j'insere dans une architecture précise au sein du zip.

    Le soucis, c'est que sa me créé un dossier et le remplit, un autre et le remplit, et pour le troisieme, il se créé et se remplit MAIS il supprime le premier dossier.
    En gros, pour une liste de 100 documents, que je passe équitablement dans 4 dossiers du zip situé à la racine... J'en retrouve deux ou trois dossiers, avec chacun bien 25 fichiers...
    Mais où sont passés les 25 disparus !! ? (Chaque dossier créé un par un marche, donc pas d'erreur de syntaxe :/ )

    Merci d'avance à ceux qui aurait une idée, car là je me casse la tête à comprendre et je vois pas du tout.

    Bonne soirée

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    montre ton code

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    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
    $zip = new ZipArchive();
         	$taille = sizeof($table);
       		for ($i=0; $i<$taille;$i++)
    		{
     
    			$compteur =0;
    			foreach($table[$i] as $t)
    			{
    				if($zip->open('../Zip.zip') == TRUE) // On crée l’archive.
         				 if($zip->open('../Zip.zip', ZipArchive::CREATE) == TRUE)
          						{
    								if ($t['document']!="NR")
    								{
    									$t['document'] = strtr($t['document'], "\\", "/");
     
    									// Analyse et inscrit dans $test le nom du document sans son arborescence ! 
    									$test=strrev($t['document']); // J'inverse la chaine
    									$pos = stripos($test,"/"); // Je cherche la position du premier antiSlash
    									$test=strrev($test);// Je retourne à nouveau la chaine
    									$test = substr($test,-$pos); // Je supprimme tout ce qui est avant la position trouvé
     
     
    									$zip->addFile($t['document'],"/".$nom[$i]."/".$test);
    									echo '</br>$zip->addFile('.$t['document']."   ,      /".$nom[$i]."/".$test;
    									$compteur++;
    								}
          						}	
     
    			}
    			$zip->close();

    Voilà, donc sa, c'est mon code.
    Pour que vous vous rendiez compte, ligne 24, j'affiche mon instruction addFiles.

    J'obtiens (Et sa risque d'etre un peu long) :
    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
     
    $zip->addFile(../../53-EXPLO/M-METHOD/base/LDD pressuriseurPDF/53DSI618O.pdf , /LDT_ITV_PZR/53DSI618O.pdf");
    $zip->addFile(../../53-EXPLO/M-METHOD/base/LDD pressuriseurPDF/53PR1504o.pdf , /LDT_ITV_PZR/53PR1504o.pdf");
    $zip->addFile(../../53-EXPLO/M-METHOD/base/LDD pressuriseurPDF/53LD814o.pdf , /LDT_ITV_PZR/53LD814o.pdf");
    $zip->addFile(../../53-EXPLO/M-METHOD/base/LDD pressuriseurPDF/53NT1091m.pdf , /LDT_ITV_PZR/53NT1091m.pdf");
    $zip->addFile(../../53-EXPLO/M-METHOD/base/LDD pressuriseurPDF/53NT1148o.pdf , /LDT_ITV_PZR/53NT1148o.pdf");
    (J'en ai 30 supplémentaire)
     
    $zip->addFile(../../53-EXPLO/M-METHOD/base/LPV pressuriseurPDF/53MOACQUj.pdf , /LPV_ITV_PZR/53MOACQUj.pdf");
    (+2x instructions)
     
    $zip->addFile(../../53-EXPLO/M-METHOD/base/LPV pressuriseurPDF/53MOES12j.pdf , /LPV_ITV_EXTRACTION_PZR/53MOES12j.pdf");
    (+2x instructions)
     
    $zip->addFile(../../53-EXPLO/M-METHOD/base/LDD pressuriseurPDF/53DSI296O.pdf , /LDT_ITV_EXTRACTION_PZR/53DSI296O.pdf");
    (+2x instructions)
     
    $zip->addFile(../../53-EXPLO/M-METHOD/base/Qualité/Analyse AT.doc , /LPV_CUV_COMPL/Analyse AT.doc");
    (+50 instructions)


    Ce qui me donne environ 200 documents. Les accents sont pas passé avec le copier coller mais l'ajout fonctionnes pour le dernier par exemple.

    Donc : On voit que je créé 5 dossiers... (Séparé par des espaces) et que mon zip, une fois créé, ne contient que les 3 derniers en écrasant les premiers...

    Chaque groupe d'instructions réalisé une par une fonctionne...

    Merci à ceux qui m'aideront, je bloque depuis deux jours :/

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    déjà ta boucle n'est pas bonne, c'est juste foreach pour parcourir un tableau, ensuite a chaque tour de boucle tu ré-ouvres l'archive,

    montre ton $table de base

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    En gros table est un tableau de tableau. D'ou mon parcours inabituel.
    Voici un bout de ce qu'il contient.
    J'ai essayer de rendre sa lisible mais bon x)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Array ( [0] => Array ( [0] => Array ( [version] => F [classement] => MAQ [repertoire] => [designation] => PV D'audit [reference] => Audit QSE activité nucléaire [indice] => [document] => ..\..\53-EXPLO\M-METHOD\base\Qualité\21MOAudit_QSE_Activité_Nucléaire.pdf [chemin] => ..\..\#QSE\Base Documents QSE\21MOAudit_QSE_Activité_Nucléaire.xls# )
     [1] => Array ( [version] => F [classement] => [repertoire] => [designation] => CSCT prestation de maintenance sur les GV [reference] => CSCT D4507081720 [indice] => 1 [document] => ..\..\53-EXPLO\M-METHOD\base\CSCT\CSCT D4507081720 Prestations generique GV ind1.pdf [chemin] => NR ) 
    [2] => Array ( [version] => F [classement] => [repertoire] => [designation] => CSCT propreté secondaire GV [reference] => CSCT D4507081874 Prestation PIGVS ind1 SDIN [indice] => 1 [document] => ..\..\53-EXPLO\M-METHOD\base\CSCT\CSCT D4507081874 Prestation PIGVS ind1 SDIN.pdf [chemin] => NR ) 
    [3] => Array ( [version] => F [classement] => [repertoire] => [designation] => CSCT lançage renforcé [reference] => D450711002484 [indice] => 0 [document] => ..\..\53-EXPLO\M-METHOD\base\CSCT\CSCT D450711002484 Lançage renforcé.pdf [chemin] => NR ) 
    [4] => Array ( [version] => F [classement] => L2 [repertoire] => B [designation] => VSO générique PI GVS [reference] => D450712012648 [indice] => / [document] => ..\..\53-EXPLO\M-METHOD\base\LDD Coordination\D450712012648 VSO DRT PIGVS.pdf [chemin] => NR )
     [5] => Array ( [version] => F [classement] => L2 [repertoire] => B [designation] => Prestation de coordination propreté secondaire GV [reference] => E/DSI/INT/COO/GV/04 [indice] => 6 [document] => ..\..\53-EXPLO\M-METHOD\base\LDD Coordination\53DSI1152M.pdf [chemin] => ..\..\53-EXPLO\M-METHOD\53dsi1152m.doc )
    Merci pour l'aide !

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fait un var_export

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Le var_export me rend exactement le meme résultat que le print_r.
    C'est aussi moche x).
    Et vu que j'ai 300 lignes faciles, je peux pas tout mettre ici. Mais voila l'extrait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    array ( 0 => array ( 0 => array ( 'version' => 'F', 'classement' => 'MAQ', 'repertoire' => NULL, 'designation' => 'PV D\'audit', 'reference' => 'Audit QSE activité nucléaire', 'indice' => NULL, 'document' => '..\\..\\53-EXPLO\\M-METHOD\\base\\Qualité\\21MOAudit_QSE_Activité_Nucléaire.pdf', 'chemin' => '..\\..\\#QSE\\Base Documents QSE\\21MOAudit_QSE_Activité_Nucléaire.xls#', ), 
    1 => array ( 'version' => 'F', 'classement' => NULL, 'repertoire' => NULL, 'designation' => 'CSCT prestation de maintenance sur les GV', 'reference' => 'CSCT D4507081720', 'indice' => '1', 'document' => '..\\..\\53-EXPLO\\M-METHOD\\base\\CSCT\\CSCT D4507081720 Prestations generique GV ind1.pdf', 'chemin' => 'NR', ), 
    2 => array ( 'version' => 'F', 'classement' => NULL, 'repertoire' => NULL, 'designation' => 'CSCT propreté secondaire GV', 'reference' => 'CSCT D4507081874 Prestation PIGVS ind1 SDIN', 'indice' => '1', 'document' => '..\\..\\53-EXPLO\\M-METHOD\\base\\CSCT\\CSCT D4507081874 Prestation PIGVS ind1 SDIN.pdf', 'chemin' => 'NR', ), 
    3 => array ( 'version' => 'F', 'classement' => NULL, 'repertoire' => NULL, 'designation' => 'CSCT lançage renforcé', 'reference' => 'D450711002484', 'indice' => '0', 'document' => '..\\..\\53-EXPLO\\M-METHOD\\base\\CSCT\\CSCT D450711002484 Lançage renforcé.pdf', 'chemin' => 'NR', ),

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    le var_export renvoie do code PHP, contrairement au var_dump

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Okay okay mais sa me change rien si ?
    Il faut que je change quelque chose en rapport avec le var_export ? J'ai pas compris

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par barthymus Voir le message
    Okay okay mais sa me change rien si ?
    Il faut que je change quelque chose en rapport avec le var_export ? J'ai pas compris
    c'est pour que je test de mon coté, avec un var_dump je dois tout retaper

    pourquoi t'as un array de premier niveau seul ? d’où sortent les données ?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Ces données proviennent de mes tables sql.
    C'est un systeme de ged plutot complexe en fait, $table contient des tableaux de réponses de requetes, fin voila.
    Pour le premier niveau, aucune idée, peut etre quand je l'instancie avec $table = array (); ? Ou j'ai fais un push à vide x).

    Mais pourtant, quand je lis la liste, je vois bien l'ensemble de mes documents... Et dans l'zip... Que la moitié.
    Donc normalement ma table est bonne J'espere x)

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fait un requête plus simple au niveau de la base, d'ou sort la variable $nom ?

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    La variable nom contient le type de documents, je fais un push de $table et $nom en meme temps. Ains $nom contient le repertoire dans lequel je vais mettre les fichiers correspondant.
    Les requetes sont simple comme tout =)
    C'est toutes des : Select * from blabla where id = 'x'
    Après c'est comment je les traites qui est particulier =) .

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    justement faut pas de requête bateau, déjà récupère uniquement le champs document, et fait une condition pour ton $t['document']!="NR" en SQL

    en gros au final t'as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $sql = 'SELECT `document` FROM ...';
    $rows = query($sql);
     
    $zip = new ZipArchive();
    $zip->open('archive.zip', ZipArchive::CREATE);
     
    $basepath = '' // ton chemin relatif au fichier;
     
    foreach ($rows as $row) {
        $zip->addFile($basepath . '/' . $row->document, basename($row->document));
    }
     
    $zip->close();

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    J'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $r=mysql_query($query);
    foreach($r as $row)
    {
    	echo $row->document;
    }
    Avec une requete simple qui est :
    $query = " SELECT `DOCUMENT` FROM `ldt` WHERE `".$key."` >=1 " ;

    Le soucis, il me donne ": Invalid argument supplied for foreach() "
    J'avais jamais utiliser sa comme ça donc je suis perdu :/

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Enfin bref, il m'en oublis tjs...
    J'ai beau faire : Echo & AddFiles à la suite... J'ai plus de fichier dans l'école que dans l'AddFiles... :/

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    le foreach c'est un exemple de code ...

    si tu fais avec mysql_* c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($row = mysql_fetch_object($r))

    ps : nomme bien tes variables, parce que $r c'est pas tres parlant, $test non plus
    il est grand temps de passé a PDO

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    C'est fait Mais ... Tjs pas d'amélioration... Il ne me prends pas tout mes documents... Je craque...
    Merci de ton aide.

  19. #19
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est que ta requête n'est pas bonne

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Bah. Je ne pense pas justement.
    En gros, j'affiche en dessous des addFiles un echo de l'instruction.
    Et quand je les copie colle par petit bouts dans un script php, sa marche, c'est l'zippage de l'ensemble qui ne fonctionne pas.
    J'ai lu parfois qu'il pouvait parfois avoir un probleme de buffer au niveau du zip, car en fait, la fonction de zippage se faire qu'a partir du close() et j'ajoute plus de 300documents à la suite et sa provoque un écrasement du buffer...
    Fin je suis perdu...

Discussions similaires

  1. [presque résolu]Probléme liste déroulante
    Par jojo57 dans le forum Access
    Réponses: 5
    Dernier message: 21/04/2006, 11h57
  2. Réponses: 2
    Dernier message: 21/01/2005, 12h55
  3. Problème liste d'affichage
    Par nicolas66 dans le forum OpenGL
    Réponses: 6
    Dernier message: 06/12/2004, 10h10
  4. [JSP]Problème liste deroulante dynamique
    Par besco dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/09/2004, 17h58

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