Parser un fichier xml volumineux sur plusieurs pages ?

Parser un fichier xml volumineux sur plusieurs pages ? - XML/XSL - Programmation

Marsh Posté le 15-06-2006 à 00:24:24    

Bonjour,
 
J'ai intégré un système de pagination sur mon parser xml qui est celui-ci:
 

Code :
  1. <?php
  2. // le répertoire "cache"  
  3. $dir_cache = 'cache/';
  4. // nom du fichier mis en cache  
  5. $file_cache1 = 'flux1.html';
  6. if (!is_dir($dir_cache)) {
  7.    exit ('Répertoire cache "'.$dir_cache.'" inexistant !');
  8. }
  9.    // on impose la mise à jour avec une certaine periodicité  
  10. $date_modif1 = time();
  11.    // le delai entre deux rafraichissements en secondes  
  12.    $delai1 = 43200;
  13. // le fichier est-il en cache et suffisamment jeune  
  14. $file_cache1 = $dir_cache.$file_cache1;
  15. $en_cache1 = file_exists($file_cache1);
  16. if ($en_cache1) {
  17.    $en_cache1 = ($date_modif1 < filemtime($file_cache1) + $delai1);
  18. }
  19. if (!$en_cache1) {
  20.    // Lecture d'un fichier XML  
  21. function lit_xml1($fichier,$item,$champs) {
  22.    // on lit le fichier  
  23.    if($chaine = @implode("",@file($fichier))) {
  24.       // on explode sur <item>  
  25.       $tmp = preg_split("/<\/?".$item.">/",$chaine);
  26.    
  27.    
  28.      $nombre = sizeof($tmp);
  29.       // pour chaque <item>  
  30.       for($i=1;$i<$nombre -1;$i+=2)
  31.          // on lit les champs demandés <champ>  
  32.          foreach($champs as $champ) {
  33.             $tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
  34.             // on ajoute au tableau  
  35.             $tmp3[$i-1][] = @$tmp2[1];
  36.          }
  37.       // et on retourne le tableau  
  38.       return $tmp3;
  39.    }
  40. }
  41. // Exemple :  
  42. $xml1 = lit_xml1("http://monsite.com/xml.php","item",array("title","description","link","category","url" ));
  43.       foreach($xml1 as $row1) {
  44.          
  45.      
  46.       $data1 .= '<br><table width=400 height=190 align=center cellpadding=0 cellspacing=0 bgcolor="#F8D630"  border=2>';
  47.       $data1 .= '<tr>';
  48.       $data1 .= '<td colspan=2 height=25 align=center bordercolor=#FFFFCC><a href='.$row1[2].'><font color="#000000">'.$row1[0].'</font> </a></td>';
  49.       $data1 .= '</tr>';
  50.       $data1 .= '<tr>';
  51.       $data1 .= '<td bordercolor=#FFFFCC height="136" width="133" valign="middle" align="center"><a href='.$row1[2].'><img src='.$row1[4].' border=0></a></td>';
  52.       $data1 .= '<td  bordercolor=#FFFFCC ><span class="tailledescrip" ><div style="margin-left:10px;">'.$row1[1].'</div></span></td>';
  53.       $data1 .= '</tr>';
  54.       $data1 .= '<tr>';
  55.       $data1 .= '<td colspan=2 height=25 bordercolor=#FFFFCC><p><em>catégorie :</em> '.$row1[3].' <em> </td>';
  56.       $data1 .= '</tr>';
  57.       $data1 .= '</table><br>';
  58.      
  59.      
  60.    }
  61.    
  62.    $fd1 = fopen($file_cache1, "w" );
  63.    fputs($fd1, $data1);
  64.    fclose($fd1);
  65. } // fin if !$en_cache1  
  66. include $file_cache1;
  67. ?>


 
 
 
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

Reply

Marsh Posté le 15-06-2006 à 00:24:24   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed