Parser un xml sur plusieurs pages ?

Signaler
Messages postés
27
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
27 mars 2007
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
bonjour,

Actuellement je parse un fichier xml en php, en faisant une mise en cache du code généré. Cependant maintenant le fichier xml devient un peu long. Je voudrais donc le parser sur plusieurs pages? Afficher par exemple 20 résultats par page.
Voila le code que j'utilise:


<?php


// le répertoire "cache" 


$dir_cache = 'cache/';


// nom du fichier mis en cache
$file_cache1 = 'flux1.html';


if (!is_dir($dir_cache)) {
 exit ('Répertoire cache "'.$dir_cache.'" inexistant !');
}




 // on impose la mise à jour avec une certaine periodicité
$date_modif1 = time();
 // le delai entre deux rafraichissements en secondes 
 $delai1 = 43200;




// le fichier est-il en cache et suffisamment jeune
$file_cache1 = $dir_cache.$file_cache1;
$en_cache1 = file_exists($file_cache1);
if ($en_cache1) {
 $en_cache1 = ($date_modif1 < filemtime($file_cache1) + $delai1);
}


if (!$en_cache1) {
 // Lecture d'un fichier XML
function lit_xml1($fichier,$item,$champs) {
   // on lit le fichier
   if($chaine = @implode("",@file($fichier))) {
      // on explode sur 
      $tmp = preg_split("/<\/?".$item.">/",$chaine);
   
 
   $nombre = sizeof($tmp);


      // pour chaque 
      for($i=1;$i<$nombre -1;$i+=2)
         // on lit les champs demandés <champ>
         foreach($champs as $champ) {
            $tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
            // on ajoute au tableau
            $tmp3[$i-1][] = @$tmp2[1];
         }
      // et on retourne le tableau
      return $tmp3;
   }
}


// Exemple :
$xml1 = lit_xml1("http://monsite.com/xml.php","item",array("title","description","link","category","url"));


  foreach($xml1 as $row1) { 
   
  
  $data1 .= '
';
  $data1 .= '----
';
  $data1 .= ''.$row1[0].' , ';
  $data1 .= '';
  $data1 .= '----
';
  $data1 .= ', ';
  $data1 .= '
'.$row1[1].'
, ';
  $data1 .= '';
  $data1 .= '----
';
  $data1 .= 'catégorie : '.$row1[3].' , ';
  $data1 .= '';
  $data1 .= '

';
  
  
 }
 
 $fd1 = fopen($file_cache1, "w");
 fputs($fd1, $data1);
 fclose($fd1);


} // fin if !$en_cache1


include $file_cache1;
?> 



Je ne vois pas trop comment modifier ce code ?

Merci<!--IBF.ATTACHMENT_177514--><!-- THE POST -->

8 réponses

Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
désolé pour ce post inutile et pour t'avoir (peut-etre) fait esperant en recevant un mail de la part de code-sources
mais je tenais juste a dire bonjours a malalam qui je suis sur va te faire un plaisir de te répondre ;)

L0rD...
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

ouais...ben demain, lol, là je me rentre :-)
Et puis moi, je ne parse pas XML de cette manière...mais avec DOM ou simpleXML, et du SXLT pour la mise en forme.
ceci dit, en attendant demain : c'est quoi le problème ? C'est trop long à l'affichage (une trop grande page), ou trop lent ?


 
Messages postés
27
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
27 mars 2007

Non ce n'est pas lent c'est juste que la page commence a etre trop grande, je voudrais faire ca en plusieurs pages. Pas plus de 20 résultats/page par exemple.
Messages postés
27
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
27 mars 2007

C'est bon j'ai réussi à intégrer un système de pagination sur le parser Xml. J'ai fait plusieurs tests, tout fonctionne correctement.
Cependant j'ai un autre soucis, je viens d'essayer de parser un gros fichier xml ( 10Mo ) et forcément j'ai eu '500 Internal Server Error' , vu qu'avant d'afficher les résultats , je mets toutes les données dans un tableau qui forcément est immense.
A votre avis comment est-ce que je pourrais faire pour ne lire qu'une partie du fichier xml puis afficher , puis lire la suite , puis afficher etc... Je pense que c'est le seul moyen de m'en sortir non ?


Merci
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

10Mo ? Tu t'en sortiras jamais avec ton parser. Au risque de me répêter : les outils fournis par php, développés par les créateurs de php sont optimisés...plutôt que de réinventer la roue, on gagne souvent à utiliser les fonctionnalités existantes de php.
Mais bref... un langage comme PHP n'est pas fait pour se grailler des fichiers de 10 Mo. Ne lire qu'une partie du XML implique déjà de savoir OU. Bref oui, tu peux, mais à mon avis, ça ne résoudra pas ton problème : ça prendra toujours autant de temps et de ressources.
Messages postés
27
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
27 mars 2007

Tres bien , je suis donc ouvert à tout suggestion. Quelqu'un a-t-il déjà lut un xml volumineux ? Comment il s'en est sorti ?
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Pour ce que tu fait, pourquoi tu n'utilise pas tout simplement XSLT pour transformer ton document XML ?
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Ben par exemple ouais...mais ce sera de ttes façons long, un fichier de 10Mo à télécharger sur le navigateur, puis à interpréter par le navigateur...