skip to main | skip to sidebar
Code 18
Manuel du savoir-faire à l'usage des geeks et des curieux
RSS
  • Accueil
  • Le web au Québec
  • Liens
  • Twitter
  • Facebook
  • À propos

lundi 8 août 2011

Quand Firebug ne suffit plus

Publié par Infinite Loop, à 10 h 15 3 commentaires

Ça m'est arrivé à quelques reprises d'avoir à travailler avec un composant Flash qui soit paramétré pour faire appel à un script PHP quelque part dans son mécanisme interne (je pense entre autre à Uploadify 2.1.4). Le problème dans ce cas-ci, c'est que lorsqu'une erreur se produit côté serveur, le message explicite renvoyé par PHP est filtré par le composant Flash pour fournir une réponse amicale pour le commun des mortels (du type HTTP error) et ainsi ne rien dévoiler de compromettant. Rien d'utile pour nous aider pendant la phase de développement et de débogage.



Comme d'habitude, je me suis tourné vers Firebug mais comme l'appel à la page PHP est délégué à Flash, il n'apparaît nulle part (ni dans les XHR de Firebug même si au fond, Flash utilise une technique identique). C'est une des rares limitations que j'ai rencontré avec le traçage de Firebug jusqu'à maintenant.

J'ai tenté d'accéder directement au script PHP pour détecter toute erreur de syntaxe, sans rien y trouver. Et comme il est exécuté en dehors du contexte du composant Flash qui l'appelle et qu'on ne voit pas quels paramètres lui sont envoyés, la manoeuvre est biaisée. Il me faut tout voir pour bien comprendre.

Parfois, le meilleur moyen de suivre à la loupe tout ce qui se passe est de capturer et d'analyser les requêtes du protocole HTTP à l'aide d'un Web Debugging Proxy. J'avais déjà essayé Charles il y a quelques années, un outil commercial multi-plateformes, mais pour le moment, un équivalent gratuit nommé Fiddler sera suffisant même s'il est limité à l'environnement Windows.

Assurez-vous d'abord dans la configuration PHP que le flag display_errors soit activé. Autrement, vous ne verrez rien (sauf par le log d'erreur de PHP qui se trouve sur le serveur). Et dans le cas d'Uploadify, ne vous fiez pas toujours à la confirmation de transfert car l'interface affiche parfois un succès même s'il rencontre un warning (difficile à détecter puisque seule une entête HTTP 500 indiquera dans l'interface une erreur côté serveur).

Une fois ceci réglé, on pourra improviser une solution en utilisant la bonne vieille méthode d'impression avec des instructions "echo" ou "print_r" en guise de trace. Dans la portion de gauche, cliquez sur la requête HTTP à décortiquer. Son détail apparaîtra sous différentes vues dans la portion de droite (onglet Inspectors). Si vous avez configuré proprement le report des erreurs PHP et que vous ne les prenez pas en charge par un handler particulier, vous devriez aussi les voir apparaître à droite. Les détails de la requête sont en haut, ceux de la réponse du serveur en bas.

Exemple de trace forcée par le code PHP :

header('HTTP/1.1 500 Internal Server Error');


echo "Étape 1\n";
echo "Valeur A: 123\n";
echo "Valeur B: 456\n";
echo "Valeurs POST: \n";
print_r($_POST);

echo "Étape 2\n";
echo "--> trace ici...";
exit;
Résultat dans Fiddler (cliquez pour agrandir) :



J'attire votre attention sur les deux boutons TextView qui seront utiles pour visualiser plus facilement les détails. Pour l'instant, c'est suffisant pour que vous puissiez pousser plus loin votre investigation en cas de problème.

N.B. le logiciel est gratuit mais souvenez-vous qu'un programmeur se cache derrière tout ce travail. Tout comme au restaurant lorsque vous recevez un bon service, vous pouvez laisser un pourboire à l'auteur en utilisant PayPal mais plus original encore, vous pouvez lui donner une commission de 7% (sans frais pour vous) sur votre prochain achat chez Amazon en magasinant à partir du lien du menu $Donate qu'il a glissé dans son application. C'est ce que je ferai la prochaine fois.


Tags: Coffre à outils, Programmation

3 réponses à "Quand Firebug ne suffit plus"

  1. Anonyme a dit...
    10 août 2011 à 11 h 53

    Je sais pas si ça peut aider mais il existe aussi un module Firefox qui s'appuie sur Firebug et qui permet de débugguer du flash. Ça s'appelle FlashFirebug. Je sais pas si ça aurait pu aider dans ce cas car je ne l'ai pas testé mais bon... Toujours bon à savoir :)

    Infinite Loop a dit...
    10 août 2011 à 12 h 02

    Tout à fait, très pertinent à connaître, merci.

    Dans ce cas-ci, le Flash n'était pas 100% en cause. J'ai plutôt l'impression qu'il capturait uniquement le code HTTP 500 de la page PHP et qu'il aseptisait le message d'erreur retourné à l'usager (ce qui n'est pas mauvais pour préserver la sécurité).

    D'une façon ou d'une autre, ce sont deux bonnes pistes pour examiner ce qui se passe sous le capot.

    Anonyme a dit...
    13 août 2011 à 10 h 55

    Les vrais utilisent Wireshark.

    http://www.wireshark.org/

    Amicalement,

    G.


Publier un commentaire

Message plus récent Messages plus anciens Accueil
S'abonner à : Publier des commentaires (Atom)
    Suivre @code18 sur Twitter

    Catégories

    • Apache (21)
    • Citations (167)
    • Club Vidéo (24)
    • Coffre à outils (56)
    • CSS (8)
    • Curiosités (117)
    • Design Pattern (2)
    • Drupal (8)
    • Easter Eggs (22)
    • Extensions Firefox (20)
    • GIMP (7)
    • Histoire (21)
    • HTML (32)
    • Humour (57)
    • Intégration (34)
    • iPod (12)
    • JavaScript (110)
    • Jeu de combat (6)
    • Le coin du geek (128)
    • Liens (12)
    • Linux (56)
    • Livres (78)
    • Lois et principes (46)
    • Marché des saveurs (26)
    • Mathématique (18)
    • Mobile (5)
    • Montréal (32)
    • Musique (112)
    • Pancartes et écriteaux (16)
    • Perl (8)
    • Pérou (1)
    • PHP (130)
    • PostgreSQL (44)
    • Programmation (105)
    • Saviez-vous que (55)
    • Sécurité (22)
    • SEO (5)
    • SQL Server (22)
    • Vieilles publicités (6)
    • Virtualisation (8)
    • Voyages (1)
    • Zend Framework (26)

    Divers

    Archives

    • ►  2015 (6)
      • ►  août 2015 (1)
      • ►  juillet 2015 (1)
      • ►  février 2015 (3)
      • ►  janvier 2015 (1)
    • ►  2014 (8)
      • ►  décembre 2014 (1)
      • ►  novembre 2014 (1)
      • ►  octobre 2014 (1)
      • ►  août 2014 (2)
      • ►  juillet 2014 (2)
      • ►  janvier 2014 (1)
    • ►  2013 (53)
      • ►  décembre 2013 (2)
      • ►  novembre 2013 (1)
      • ►  octobre 2013 (3)
      • ►  septembre 2013 (2)
      • ►  août 2013 (5)
      • ►  juillet 2013 (3)
      • ►  juin 2013 (5)
      • ►  mai 2013 (3)
      • ►  avril 2013 (7)
      • ►  mars 2013 (7)
      • ►  février 2013 (11)
      • ►  janvier 2013 (4)
    • ►  2012 (105)
      • ►  décembre 2012 (8)
      • ►  novembre 2012 (5)
      • ►  octobre 2012 (4)
      • ►  septembre 2012 (1)
      • ►  août 2012 (8)
      • ►  juillet 2012 (7)
      • ►  juin 2012 (7)
      • ►  mai 2012 (10)
      • ►  avril 2012 (13)
      • ►  mars 2012 (15)
      • ►  février 2012 (15)
      • ►  janvier 2012 (12)
    • ▼  2011 (146)
      • ►  décembre 2011 (14)
      • ►  novembre 2011 (11)
      • ►  octobre 2011 (12)
      • ►  septembre 2011 (13)
      • ▼  août 2011 (15)
        • Le chaud lapin qui voulait une année sabbatique
        • La valeur illusoire des médias sociaux
        • Citation no. 132 sur la vie
        • On est jamais mieux servi que par soi-même
        • Votre performance au travail ne réflète pas votre ...
        • L'histoire de la patate sur la plage
        • Citation no. 131 sur la parole
        • Le hibou qui fait coucou
        • Machine internationale qui donne le temps
        • La clé du problème
        • Quand Firebug ne suffit plus
        • Citation no. 130 sur l'assurance-emploi
        • Livres absurdes qui ont existé malgré tout
        • Comment ne pas gagner à la loterie
        • Retirer un site du Wayback Machine
      • ►  juillet 2011 (17)
      • ►  juin 2011 (18)
      • ►  mai 2011 (15)
      • ►  avril 2011 (9)
      • ►  mars 2011 (7)
      • ►  février 2011 (3)
      • ►  janvier 2011 (12)
    • ►  2010 (398)
      • ►  décembre 2010 (29)
      • ►  novembre 2010 (28)
      • ►  octobre 2010 (32)
      • ►  septembre 2010 (34)
      • ►  août 2010 (22)
      • ►  juillet 2010 (35)
      • ►  juin 2010 (42)
      • ►  mai 2010 (36)
      • ►  avril 2010 (37)
      • ►  mars 2010 (34)
      • ►  février 2010 (32)
      • ►  janvier 2010 (37)
    • ►  2009 (430)
      • ►  décembre 2009 (32)
      • ►  novembre 2009 (34)
      • ►  octobre 2009 (33)
      • ►  septembre 2009 (37)
      • ►  août 2009 (37)
      • ►  juillet 2009 (39)
      • ►  juin 2009 (38)
      • ►  mai 2009 (37)
      • ►  avril 2009 (35)
      • ►  mars 2009 (37)
      • ►  février 2009 (32)
      • ►  janvier 2009 (39)
    • ►  2008 (84)
      • ►  décembre 2008 (34)
      • ►  novembre 2008 (39)
      • ►  octobre 2008 (11)

    Abonnés

Copyright © All Rights Reserved. Code 18 | Converted into Blogger Templates by Theme Craft