Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1782 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Controler une boucle infinie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Controler une boucle infinie

n°923180
timocars
En vacances....
Posté le 14-12-2004 à 18:32:47  profilanswer
 

: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
mood
Publicité
Posté le 14-12-2004 à 18:32:47  profilanswer
 

n°923190
Berceker U​nited
PSN : berceker_united
Posté le 14-12-2004 à 18:44:22  profilanswer
 

[:masterofpuppets]ici


Message édité par Berceker United le 14-12-2004 à 18:45:34
n°923213
sircam
I Like Trains
Posté le 14-12-2004 à 19:07:42  profilanswer
 

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}
n°923219
Berceker U​nited
PSN : berceker_united
Posté le 14-12-2004 à 19:13:23  profilanswer
 

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
n°923237
timocars
En vacances....
Posté le 14-12-2004 à 19:28:34  profilanswer
 

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
n°923240
timocars
En vacances....
Posté le 14-12-2004 à 19:31:03  profilanswer
 

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
n°923287
Berceker U​nited
PSN : berceker_united
Posté le 14-12-2004 à 20:27:23  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Controler une boucle infinie

 

Sujets relatifs
touche [TAB] qui boucle uniquement sur input + accessibilitebesoin de votre avis sur un insert dans une boucle
une boucle dans un batch ?contrôler ou limiter la mise en cache
[MFC/Pocket PC]Appeler/Contrôler une application?Controler une application en C
boucle do ou boucle forparsage de fichier - boucle sur un repertoire
Je trouve pas à propos d'une boucle while ...[Abandon]Contrôler un service NT
Plus de sujets relatifs à : Controler une boucle infinie


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR