cs_seabird
Messages postés27Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention27 mars 2007
-
7 juin 2006 à 16:42
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 2010
-
15 juin 2006 à 09:16
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 -->
xactise
Messages postés507Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention22 juin 20122 7 juin 2006 à 17:34
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 ;)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 7 juin 2006 à 18:15
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 ?
cs_seabird
Messages postés27Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention27 mars 2007 7 juin 2006 à 18:47
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.
cs_seabird
Messages postés27Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention27 mars 2007 15 juin 2006 à 00:12
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 15 juin 2006 à 06:53
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.