Php si erreur recommence

Résolu
Cokin -  
 Cokin -
Bonjour,

J'utilise simplexml pour parser des fichiers xml

ça fonctionne bien, mais parfois il y a trop de connections simultanées et cela génère une erreur.

Je voudrais pouvoir faire une boucle en cas d'erreur :
(si erreur, recommence, sinon continue)

voila mon code

function xml_attribute($object, $attribute)

{

if(isset($object[$attribute]))

return (string) $object[$attribute];

}

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL,"http://.......variable.xml");

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$contenu = curl_exec($curl);

$xml = new SimpleXMLElement($contenu); //<= l'erreur est à cette ligne

...
Merci pour votre aide.

5 réponses

  1. Cokin
     
    Je pense avoir trouvé une solution mais ce n'est pas élégant

    j'utilise simplexml_load_string et vérifie plusieurs fois si c'est bon (2 fois dans cet exemple)

    Pensez vous que ce code fonctionne (je ne peux pas simuler l'erreur)

    // @ permet de ne pas afficher l'erreur
    $xml = @simplexml_load_string($contenu);

    // ! est en erreur
    if(!$xml)
    $xml = @simplexml_load_string($contenu);
    else

    if(!$xml)
    $xml = @simplexml_load_string($contenu);
    else

    ....
    0
    1. Webster95 Messages postés 655 Statut Membre 142
       
      Et si il plante 3 fois ? :/

      Regarde mon code en dessous, la boucle se préprete jusqu'a que ton code fonctionne.

      Tu ne peux pas anticiper le nombre de fois que ton fichier va planter, cela peut etre 2, 3.. 10 fois !
      0
  2. Cokin
     
    et comme ça ?

    //étiquette erreur pour le goto
    erreur:

    // @ permet de ne pas afficher l'erreur
    $xml = @simplexml_load_string($contenu);

    // ! est en erreur
    if(!$xml)
    goto erreur;
    else
    0
  3. Webster95 Messages postés 655 Statut Membre 142
     
    Oui, en plaçant un flag tant que ton programme fonctionne .Du genre

    $flag = true
    
    while($flag == true){
    $xml = new SimpleXMLElement($contenu); //<= l'erreur est à cette ligne 
    
    if($xml){
    $flag = false;
    }
    
    }
    
    


    En quelques sortes, je te traduit:

    TANTQUE flag = vrai
    $xml = new SimpleXMLElement($contenu);
    
    SI$xml est rempli
    flag = faux
    FINSI
    
    FINTANTQUE
    


    En clair, tu répète ta boucle jusqu'a que ta variable $xml ai fonctionné =)

    0
  4. Cokin
     
    Merci pour ta réponse, j'ai malheureusement une erreur

    Parse error: syntax error, unexpected T_WHILE

    la solution que j'évoque au dessus ne fonctionne pas car ma Version PHP est la 5.2.17 est n'est valable qu'à partir de 5.3.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Cokin
     
    je suis passé à php 5.4.4, ma solution fonctionne ;-)

    j'ai toujours une erreur de syntaxe avec la tienne .

    Merci quand même @+
    0
    1. Webster95 Messages postés 655 Statut Membre 142
       
      C'est normal, j'ai oublié le ;

      $flag = true;
      
      while($flag == true){
      $xml = new SimpleXMLElement($contenu); //<= l'erreur est à cette ligne 
      
      if($xml){
      $flag = false;
      }
      
      }
      
      0
    2. Cokin
       
      merci !!!
      0