Controler une boucle infinie

Controler une boucle infinie - PHP - Programmation

Marsh Posté le 14-12-2004 à 18:32:47    

:hello: Bonjour,
 
Mon site utilise un lecteur de fichier xml. Il se trouve que parfois, quand les fichiers xml contiennent des erreurs, celui-ci se met à boucler et mon hébergeur n'aime pas ça du tout.....
 
Connaitriez-vous une fonction qui pourrait controler par exemple le temps depuis lequel le script tourne et l'arrêter le cas échéant...
 
Merci  :)  

Code :
  1. //Déclaration de la classe XML
  2. $date=date("d/m" );
  3. class xml {
  4. var $parser;
  5. function parse($xmlstring){
  6.   $this->parser = xml_parser_create();
  7.   xml_set_object($this->parser, $this);
  8.   xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);
  9.   xml_set_element_handler($this->parser, "tag_open", "tag_close" );
  10.   xml_set_character_data_handler($this->parser, "cdata" );
  11.   // Initialisation
  12.         $this->node_stack = array();
  13.         $this->tag_open(null, "root", array());
  14.         xml_parse($this->parser, $xmlstring);
  15.         xml_parser_free($this->parser);
  16.         $rnode = array_pop($this->node_stack);
  17. return($rnode);}
  18. function tag_open($parser, $tag, $attributes){
  19.         // creation d'un nouveau node...
  20.         $node = array();
  21.         $node["_NAME"]      = $tag;
  22.         foreach ($attributes as $key => $value) {
  23.             $node[$key] = $value;}
  24.         $node["_DATA"]      = "";
  25.         $node["_ELEMENTS"]  = array();
  26.         // ajouter le nouveau node à la fin de la pile de node
  27.         array_push($this->node_stack, $node);  }
  28. function cdata($parser, $cdata){
  29.   // ajouter les données au dernier node de la pile
  30.         $lastnode = count($this->node_stack);
  31.         $this->node_stack[$lastnode-1]["_DATA"] .= $cdata;}
  32. function tag_close($parser, $tag){
  33.   // suppression de la pile  
  34.         $node = array_pop($this->node_stack);
  35.         $node["_DATA"] = trim($node["_DATA"]);
  36.         // and ajout comme élément à la fin de la pile...
  37.         $lastnode = count($this->node_stack);
  38.         array_push($this->node_stack[$lastnode-1]["_ELEMENTS"], $node);}
  39. }
  40. // récupération du fichier par paquets de 4096
  41.   $fp = fopen($rssurl, "r" );
  42.   while (!feof ($fp)) $data .= fgets($fp, 4096);
  43.   fclose ($fp);
  44.   $initPos = strpos($data, "<channel>" ); // Saut de l'entête
  45. //parse les données
  46. $xml_parser = new xml();
  47. $data = substr($data, $initPos);
  48. $root_node = $xml_parser->parse($data);
  49. $channel    = array_shift($root_node["_ELEMENTS"]);
  50. $comp=0;
  51. //Lecture  des données du RSS
  52. foreach ($channel["_ELEMENTS"] as $item){
  53. if($item[_NAME]=="item" and $comp<16) {
  54. unset($news_pubDate);
  55. unset($news_pub);
  56. unset($mod);
  57.   // suppression des antislashs   
  58.   foreach ($item["_ELEMENTS"] as $tag){
  59.     if($tag["_NAME"]=="title" ) $news_title=stripslashes($tag[_DATA]);
  60.     if($tag["_NAME"]=="link" ) $news_url=stripslashes($tag[_DATA]);
  61.     if($tag["_NAME"]=="dc:date" ) $news_pubDate=stripslashes($tag[_DATA]);
  62.     if($tag["_NAME"]=="pubDate" ) $news_pub=stripslashes($tag[_DATA]);
  63.   }
  64.  
  65. if($news_pubDate!="" )
  66. {$tabl = explode("T",$news_pubDate);
  67. $tab = explode("-",$tabl[0]);
  68. $dat="$tab[2]/$tab[1]";}
  69. else
  70. {$mod=strtotime($news_pub);
  71. $dat=date("d/m",$mod);}
  72. if($dat==$date)
  73. {$news.="\n<b>$dat</b>-<a href=\"$news_url\" target=\"_new\">$news_title</a><br>";  }
  74. else
  75. {$news.="\n$dat-<a href=\"$news_url\" target=\"_new\">$news_title</a><br>";} 
  76. $comp++;}
  77. }
  78. print"$news";


Message édité par timocars le 14-12-2004 à 18:33:55

---------------
Webmaster de http://www.touthardware.com : annuaire de tests de hardware
Reply

Marsh Posté le 14-12-2004 à 18:32:47   

Reply

Marsh Posté le 14-12-2004 à 18:44:22    

[:masterofpuppets]ici


Message édité par Berceker United le 14-12-2004 à 18:45:34
Reply

Marsh Posté le 14-12-2004 à 19:07:42    

C'est la bonne réponse à la mauvaise question...
 
En programmation, on essaie plutôt de debugger et de corriger la cause du problème (et donc d'empêcher que ça boucle) plutôt que de passer par ce genre d'artifices... pour le moins incongrus.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 14-12-2004 à 19:13:23    

sircam a écrit :

C'est la bonne réponse à la mauvaise question...
 
En programmation, on essaie plutôt de debugger et de corriger la cause du problème (et donc d'empêcher que ça boucle) plutôt que de passer par ce genre d'artifices... pour le moins incongrus.


Tu as raison.
J'ai pas cherché à lire le code j'ai répondu directe a ce qu'il cherchait
 mais apres un coup d'oeil le code peut être largement optimisé.


Message édité par Berceker United le 14-12-2004 à 19:14:16
Reply

Marsh Posté le 14-12-2004 à 19:28:34    

Merci de vos réponses. Si je demande ça c'est parce que je ne maitrise pas la partie de php qui concerne les xml parser... Je n'ai pas suffisament de temps pour m'y mettre.  
Je cherche donc quelque chose qui pourrai à coup sûr de recommencer ce qui s'est passé c'est à dire qu'une de mes sources xml a du avoir un problème et que mon hébergeur a saturé. (sachant que la prochaine fois je me fais dégager....)  
Je voulais juste un crant de sureté....


---------------
Webmaster de http://www.touthardware.com : annuaire de tests de hardware
Reply

Marsh Posté le 14-12-2004 à 19:31:03    

Par contre, si vous avez des lecteurs RSS performants, souples et SURS. Je suis preneur :)
 
Merci :)
 


---------------
Webmaster de http://www.touthardware.com : annuaire de tests de hardware
Reply

Marsh Posté le 14-12-2004 à 20:27:23    

timocars a écrit :

Merci de vos réponses. Si je demande ça c'est parce que je ne maitrise pas la partie de php qui concerne les xml parser... Je n'ai pas suffisament de temps pour m'y mettre.  
Je cherche donc quelque chose qui pourrai à coup sûr de recommencer ce qui s'est passé c'est à dire qu'une de mes sources xml a du avoir un problème et que mon hébergeur a saturé. (sachant que la prochaine fois je me fais dégager....)  
Je voulais juste un crant de sureté....


Test ton appli en local en installant un serveur pour evité de te faire kické par ton hebergeur.

Reply

Sujets relatifs:

Leave a Replay

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