seabird | Bonjour,
J'ai intégré un système de pagination sur mon parser xml qui est celui-ci:
Code :
- <?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 <item>
- $tmp = preg_split("/<\/?".$item.">/",$chaine);
-
-
- $nombre = sizeof($tmp);
- // pour chaque <item>
- 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 .= '<br><table width=400 height=190 align=center cellpadding=0 cellspacing=0 bgcolor="#F8D630" border=2>';
- $data1 .= '<tr>';
- $data1 .= '<td colspan=2 height=25 align=center bordercolor=#FFFFCC><a href='.$row1[2].'><font color="#000000">'.$row1[0].'</font> </a></td>';
- $data1 .= '</tr>';
- $data1 .= '<tr>';
- $data1 .= '<td bordercolor=#FFFFCC height="136" width="133" valign="middle" align="center"><a href='.$row1[2].'><img src='.$row1[4].' border=0></a></td>';
- $data1 .= '<td bordercolor=#FFFFCC ><span class="tailledescrip" ><div style="margin-left:10px;">'.$row1[1].'</div></span></td>';
- $data1 .= '</tr>';
- $data1 .= '<tr>';
- $data1 .= '<td colspan=2 height=25 bordercolor=#FFFFCC><p><em>catégorie :</em> '.$row1[3].' <em> </td>';
- $data1 .= '</tr>';
- $data1 .= '</table><br>';
-
-
- }
-
- $fd1 = fopen($file_cache1, "w" );
- fputs($fd1, $data1);
- fclose($fd1);
- } // fin if !$en_cache1
- include $file_cache1;
- ?>
|
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
|