Php si erreur recommence [Résolu/Fermé]

Signaler
-
 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

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

....
Webster95
Messages postés
553
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
9 juillet 2013
115
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 !
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
Messages postés
553
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
9 juillet 2013
115
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é =)




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.
je suis passé à php 5.4.4, ma solution fonctionne ;-)

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

Merci quand même @+
Webster95
Messages postés
553
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
9 juillet 2013
115
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;
}

}