En développement web, on déplore souvent le manque d'outils de débogage. Combien de fois avez-vous utilisé une suite de "echo", "print_r" ou "var_dump" pour afficher une trace de vos variables et essayer de comprendre ce qui se passait ? Peut-être avez-vous même programmé une fonction pour faire un log de vos erreurs ? Si c'est le cas, vous apprécirez FirePHP.
Comme c'est le cas avec Zend, certains produits commerciaux sont offerts pour nous aider à traquer et trouver les problèmes, mais on doit y mettre le prix. Avant de sauter aux conclusions et acheter un produit coûteux, jetez un oeil à FirePHP, un outil gratuit qui peut souvent s'avérer suffisant.
Pour en tirer avantage, vous aurez besoin de trois choses :
- installer l'extension Firebug pour Firefox
- installer l'extension FirePHP
- installer la librairie FirePHPCore (aussi disponible par PEAR). Si vous utilisez le Zend Framework, assurez-vous de jeter un oeil à la classe Zend_Log_Writer_Firebug pour une meilleure intégration.
Pour pouvoir faire afficher du contenu dans la console Firebug à partir de PHP, vous devrez inclure les classes de FirePHPCore à votre projet. Ensuite, il y a deux façons de l'utiliser : un mode procédural ou par l'API orienté objet. Dans mon cas, je préférerai la seconde version.
FirePHP est activé par défaut et un interrupteur permet de le mettre à "off" pour cacher l'information sensible lorsque le projet est en production. Cette configuration peut être conservée et vérifiée dans le bootstrap du projet, ce qui nous permet de garder toutes les lignes de code qui effectuent des traces sans avoir à les retirer, les commenter une à une ou ajouter des conditions d'exécution.
// procéduralPlusieurs types de messages peuvent être affichés, chacun avec une icône différente pour facilement les repérer dans la console.
// require_once('FirePHP/FirePHPCore/fb.php');
// orienté objet
require_once('FirePHP/FirePHPCore/FirePHP.class.php');
$firephp = FirePHP::getInstance(true);
// important de mettre à false en production!
$firephp->setEnabled(true);
$firephp->log('Début du programme');Ou mieux, utiliser la trace :
$firephp->info('La condition est fausse...');
$firephp->warn('Possiblement une erreur');
$firephp->error('Exception : ça a planté!');
$firephp->trace('You are here!');Celle-ci a l'avantage de pointer à quel endroit exact (fichier et ligne de code PHP) le message a été déclenché.
On peut aussi grouper les appels sous une étiquette :
$firephp->group('Transaction 1');Et faire afficher le contenu des variables en utilisant dump() :
$firephp->log('Faire un lock');
$firephp->log('Fonction quelconque');
$firephp->log('Retirer le lock');
$firephp->groupEnd();
$variable = 'Contenu de la variable';Contrairement aux autres fonctions, celle-ci affichera les valeurs dans l'onglet Net (réseau), à l'intérieur de la requête HTTP, sous l'onglet Server.
$array = array('x' => 1, 'y' => 2);
$firephp->dump('Variable 1', $variable);
$firephp->dump('Variable 2', $array);
Mais rien n'empêche de le faire avec log() pour le placer dans la console :
$firephp->log($variable);Si vous comptez faire du développement professionnel, vous vous devez d'avoir au moins un outil de débogage et de l'utiliser efficacement. N'oubliez jamais que vous êtes responsables de votre propre qualité, même si votre entreprise compte des ressources en assurance qualité. D'ailleurs, je ne connais aucun programmeur qui aime se faire remettre sur le nez un bogue qui lui serait passé sous le nez.
$firephp->log($array);
À titre d'information, une version 1.0 complètement réécrite est en cours. Ça promet!