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

Langage PHP Discussion :

Lire le contenu d'une archive ZIP


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut Lire le contenu d'une archive ZIP
    Bonjour à tous,

    Après plusieurs recherches et de nombreux essais, je viens vous demander de l'aide.
    Je dois réaliser un script qui parcourt tous les dossiers d'une arborescence dans le but de trouver les fichiers ZIP qui se trouvent dans les dossiers. Une fois que j'ai trouvé ces fichiers ZIP, je dois lire le fichier XML qui se trouve dans chaque ZIP pour en extraire certaines balises.
    Mon problème n'est pas de parcourir l'arborescence ni d'extraire certaines balises des fichiers XML mais juste d'ouvrir les fichiers ZIP et de lire le fichier qui s'y trouve.

    Est-ce que quelqu'un aurait des pistes de recherches ou pourrait m'aider svp ? Y a-t-il quelque chose à modifier dans le fichier php.ini (j'ai décommenté la ligne "extension=php_zip.dll") ?

    Merci beaucoup.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut
    Merci pour ce lien mais je ne comprends pas trop en quoi il peut permettre de lire le fichier contenu dans le ZIP.
    Est-ce qu'il faut ajouter une fonction fread ou ReadFile ou quelque chose du style ?
    Merci en tout cas

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Une fois que tu as ton fichier tu le manipules avec DOM ou SimpleXML.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut
    Alors j'ai testé ceci :

    - ouverture de l'archive
    - recherche d'une balise
    - fermeture de l'archive
    Ce qui me donne ce code :

    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
    <?php
       $zip = new ZipArchive(); 
        // On ouvre l'archive
        if($zip->open('zip.zip') == TRUE)
    	{
    		if($zip1 = $zip->open('zip.zip', ZipArchive::CREATE) === TRUE)
    		{
    			echo 'Zip ouvert';
     
    			    //On charge le fichier.
     			    $dom = new DomDocument;
    			    $zip1->load('test.xml');
    				//On repère les balises string.
    				$listestring = $dom->getElementsByTagName('string');
    				//On parcourt chaque balise string.
    				foreach($listestring as $string) 
    				{ 
    					//On cherche les attributs level des balises c.
    					$level = $string->getAttribute("CONTENT");
     
    					echo $level->firstChild->nodeValue;
    				}
     
    			$zip->close();
    		 }
            else
            {
    			echo 'Impossible d'ouvrir &quot;Zip.zip&quot;';
    		} 
    	}
    ?>
    Sauf que j'obtiens l'erreur suivante (le ZIP s'ouvre bien) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function load() on a non-object in C:\wamp\www\xmlzip\zip.php on line 14
    Je pense que je n'ai pas tout compris

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as oublié de recuperer le fichier dans le zip et tu utilises $zip1 au lieu de $dom.

    Ca devrait fonctionner comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo 'Zip ouvert';
    $xml_file = $zip->getFromName('test.xml');
    $dom = new DomDocument;
    $dom->loadXML($zip);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut
    Je comprends déjà mieux ;-)
    Seulement j'ai toujours une erreur.
    Voici le code :
    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
       $zip = new ZipArchive(); 
        // On ouvre l'archive
        if($zip->open('zip.zip') == TRUE)
    	{
    		// On crée l'archive
    		if($zip = $zip->open('zip.zip', ZipArchive::CREATE) === TRUE)
    		{
    			echo 'Zip ouvert';
    			$xml_file = $zip->getFromName('test.xml');
     
    				$dom = new DomDocument;
    				$dom->loadXML($xml_file);
     
    				//On repère les balises string.
    				$listestring = $dom->getElementsByTagName('string');
    				//On parcout chaque balise c.
    				foreach($listestring as $string) 
    				{ 
    					//On cherche les attributs level des balises c.
    					$level = $string->getAttribute("CONTENT");
     
    					echo $level->firstChild->nodeValue;
    				}
     
    			$zip->close();
    		 }
            else
            {
    			echo 'Impossible d'ouvrir &quot;Zip.zip&quot;';
    		} 
    	}
    Et voici l'erreur que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function getFromName() on a non-object in C:\wamp\www\xmlzip\zip.php on line 11
    Y a-t-il quelque chose à modifier dans php.ini pour que cela fonctionne ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      $zip = new ZipArchive(); 
        // On ouvre l'archive
        if($zip->open('zip.zip') == TRUE)
    	{
    		// On crée l'archive
    		if($zip = $zip->open('zip.zip', ZipArchive::CREATE) === TRUE)
    		{
    ca fait beaucoup de $zip non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut
    J'ai modifié le nom de mon archive ZIP utilisée en exemple, ce qui donne 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
    24
    25
    26
    27
    28
    29
    30
    31
    $zip = new ZipArchive(); 
        // On ouvre l'archive
        if($zip->open('monarchive.zip') == TRUE)
    	{
    		// On crée l'archive
    		if($zip = $zip->open('monarchive.zip', ZipArchive::CREATE) === TRUE)
    		{
    			echo 'Zip ouvert';
    			$xml_file = $zip->getFromName('test.xml');
     
    				$dom = new DomDocument;
    				$dom->loadXML($xml_file);
     
    				//On repère les balises string.
    				$listestring = $dom->getElementsByTagName('string');
    				//On parcout chaque balise c.
    				foreach($listestring as $string) 
    				{ 
    					//On cherche les attributs level des balises c.
    					$level = $string->getAttribute("CONTENT");
     
    					echo $level->firstChild->nodeValue;
    				}
     
    			$zip->close();
    		 }
            else
            {
    			echo 'Impossible d'ouvrir "monarchive.zip"';
    		} 
    	}
    Est-ce que quelqu'un voit ce qui cloche ?

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est toujours le meme problème : tu appelles deux fois $zip->open dont une fois ou tu mets le résultat dans $zip lui même.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut
    Maintenant que j'ai compris d'où vient le problème ça fonctionne :
    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
    		// On crée l'archive
    		if($zip->open('monarchive.zip', ZipArchive::CREATE) === TRUE)
    		{
    			//echo 'Zip ouvert';
    			$xml_file = $zip->getFromName('test.xml');
     
    				$dom = new DomDocument;
    				$dom->loadXML($xml_file);
     
    				//On repère les balises string.
    				$listestring = $dom->getElementsByTagName('String');
    				//On parcout chaque balise c.
    				foreach($listestring as $string) 
    				{ 
    					//On cherche les attributs level des balises c.
    					echo $level = utf8_decode($string->getAttribute("CONTENT"))."<br>";
     
    					//echo $string->firstChild->nodeValue;
    				}
     
    			$zip->close();
    		 }
            else
            {
    			echo 'Impossible d'ouvrir &quot;Zip.zip&quot;';
    		}
    Merci beaucoup pour tes explications

  12. #12
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut
    Une dernière question.
    Comment je peux trouver le nom du fichier qui se trouve dans mon zip ?

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faut que tu parcours l'archive Zip comme expliqué dans le guide de Julp.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut
    J'ai essayé en mettant ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $zip = zip_open("zip.zip");
    if ($zip) {
         while($zip_entry = zip_read($zip)) {
              echo zip_entry_name($zip_entry);
         }
    }
    mais ça me retourne l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: zip_read() expects parameter 1 to be resource, integer given in C:\wamp\www\xmlzip\parcourir_zip.php on line 11

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    c'est redevenu zip.zip ton fichier ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut
    zip.zip est juste un exemple. Mais cela ne change rien dans l'exécution, j'ai testé

  17. #17
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Reprend bien les exemples PHP5, la tu as fais un mix de PHP4 et PHP5.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     $zip = new ZipArchive(); 
        // On ouvre l'archive
        if($zip->open('zip.zip') === TRUE)
    	{
    $nbEntrees = $zip->numFiles;
    $entree = $zip->statIndex($i);
    $name = $entree['name'];
    }
    Ici je suppose directement qu'il n'y a qu'un fichier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Par défaut
    Super ça à l'air de fonctionner !!
    Merci pour ton aide

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

Discussions similaires

  1. Lire le contenu d'une archive tar d'une cartouche
    Par AAWOOPY56 dans le forum AIX
    Réponses: 4
    Dernier message: 16/12/2010, 16h28
  2. lire le contenu d'une fichier .Dat
    Par zidenne dans le forum Delphi
    Réponses: 10
    Dernier message: 28/07/2006, 12h27
  3. [Débutant]Comment lire le contenu d'une Listview ?
    Par PierreBord dans le forum Composants VCL
    Réponses: 2
    Dernier message: 13/02/2006, 16h40
  4. Lire le contenu d'une page web grâce à un script PHP
    Par BloodyImp dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2005, 22h29
  5. [C#] [WinForms] Lecture d'un fichier dans une archive ZIP
    Par aegypius dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/12/2004, 17h15

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