gestion des erreurs

gestion des erreurs - PHP - Programmation

Marsh Posté le 27-11-2008 à 16:52:53    

Bonjour, il arrive que '$lien' bloque ou que 'title' n'existe pas, comment faire pour éviter que le site continue son traitement ?
code:

Code :
  1. $ch = curl_init($lien);
  2. curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  3. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  5. if ($userpwd) curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
  6. $contenu = curl_exec($ch);
  7. curl_close($ch);
  8. $doc = @DOMDocument::loadXML($contenu);
  9. $elems = $doc->getElementsByTagName('title');

Reply

Marsh Posté le 27-11-2008 à 16:52:53   

Reply

Marsh Posté le 27-11-2008 à 17:49:07    

Tu n'a qu'à les tester avec isset() :
http://fr.php.net/isset
Et tu peux activer l'affichage des notices pour t'aider
 

Code :
  1. error_reporting(E_ALL | E_NOTICE);

Reply

Marsh Posté le 27-11-2008 à 18:07:56    

J'ai mis  

Code :
  1. error_reporting(0);


L'erreur ne s'affiche plus, mais l'execution est stopée. Comment dire de quitter la fonction en cours et de continuer le reste ?

Reply

Marsh Posté le 27-11-2008 à 18:09:36    

et bien teste avec isset :

Code :
  1. <?php
  2. if(!isset($var)) {
  3.    //$var n'est pas initialise
  4. } else {
  5.    //Traitement de $var
  6. }

Reply

Marsh Posté le 27-11-2008 à 18:26:58    

J'ai essayé isset, voilà la suite:
L'erreur est sur cette ligne:

Code :
  1. $elems = $doc->getElementsByTagName('title');


Dans la page spécifié 'title' est introuvable .
Le problème c'est que des fois il y a ce mot !


Message édité par majong le 27-11-2008 à 18:27:43
Reply

Marsh Posté le 27-11-2008 à 18:31:18    

...
Quelle est l'erreur exacte ?
As tu essayé avec isset ?

Reply

Marsh Posté le 27-11-2008 à 18:43:00    

oui,
voilà la valeur de $contenu:
302 Moved
The document has moved here.  
 
Voilà l'erreur affichée en dessous:
Fatal error: Call to a member function getElementsByTagName() on a non-object in mon_url on line 473


Message édité par majong le 27-11-2008 à 18:43:30
Reply

Marsh Posté le 27-11-2008 à 18:46:25    

Le code:

Code :
  1. curl_close($ch);
  2. if(isset($contenu))
  3. {
  4.   $doc = @DOMDocument::loadXML($contenu);
  5.   if(isset($doc))
  6.   {
  7.     $elems = $doc->getElementsByTagName('title');
  8.     if(isset($elems))
  9.     { ...

Reply

Marsh Posté le 27-11-2008 à 18:46:32    

le problème vient de ta requête CURL, elle échoue.
Du coup impossible de lire $contenu puisqu'il est invalide :/
N'oublie pas de tester avec isset(), je me répète, mais j'ai l'impression que tu ne le fais pas :p
Si la variable n'est pas ok annule le traitement bien sur.

Reply

Marsh Posté le 27-11-2008 à 18:55:47    

On a posté presque en meme temps, tu vois qqch d'autre à mettre ?
juste avant $doc il manque echo $contenu;
Dans le fichier xml il y a bien qqch, sauf qu'il manque les balise non ?


Message édité par majong le 27-11-2008 à 18:57:29
Reply

Marsh Posté le 27-11-2008 à 18:55:47   

Reply

Marsh Posté le 27-11-2008 à 18:56:52    

Ne jamais mettre d'@ devant une fonction, c'est le mal, ça cache tous les problèmes.
Ne jamais mettre l' "error_reporting" à 0 sur un serveur de test : c'est encore plus le mal, ça cache vraiment tous les problèmes.
 
 
Pour le reste [:sh@rdar] (commence par lire la doc) c'est un bon point de départ pour savoir ce que retourne chaque fonction et donc comment tester le résultat (isset() ne sert à rien si on obtient un booléen ;) )
 
PS : Vu le texte de ton $contenu, c'est normal que ta page gueule : t'es tombé sur une page de redirection et non pas sur une page (x)html.

Reply

Marsh Posté le 27-11-2008 à 18:58:23    

RTFM :
http://fr.php.net/isset
isset() vérifie l'existence d'une variable, si tu l'initialise juste avant pas besoin de tester son existence, teste juste sa validité (pour $doc, par exemple, qu'il contienne un objet DOM correct).
Ensuite, le problème vient de ta requete CURL, regarde le message d'erreur.
 
EDIT :  [:benou_grilled]


Message édité par Profil supprimé le 27-11-2008 à 19:03:25
Reply

Marsh Posté le 27-11-2008 à 18:59:56    

Oui, mais si j'oublie de mettre à jour mon lien xml, je ne veux pas qu'il tombe le site !
Je règle les autres problème ...

Reply

Marsh Posté le 27-11-2008 à 19:05:16    

J'ai supprimé le @ et viré error_reporting(0)
 

Code :
  1. Warning: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: meta line 1 and HEAD in Entity, line: 2 in mon_url on line 467
  2. Warning: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: HEAD line 1 and HTML in Entity, line: 6 in mon_url on line 467
  3. Warning: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag HTML line 1 in Entity, line: 7 in mon_url on line 467
  4. Fatal error: Call to a member function getElementsByTagName() on a non-object in mon_url on line 470

Reply

Marsh Posté le 27-11-2008 à 19:06:25    

Comment savoir que le fichier xml est valide alors ?

Reply

Marsh Posté le 27-11-2008 à 19:07:00    

et bien le fichier XML n'est pas correct
il te suffit de le corriger à partir des indications qui te sont données.


Message édité par Profil supprimé le 27-11-2008 à 19:07:27
Reply

Marsh Posté le 27-11-2008 à 19:11:22    

Ben déjà quand t'as un fichier qui commence par un nombre, tu es sur que ça n'est pas du xml. ;)
Ca t'éliminera déjà toutes les redirections et les messages d'erreurs envoyé par un serveur web.
 
Pour savoir si c'est du xml, franchement à par le parser je ne voit pas comment on pourrait le deviner.

Reply

Sujets relatifs:

Leave a Replay

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