FirePHP

Bonjour à tous,

En PHP, la manière la plus simple de trouver une erreur dans un script ou de vérifier la valeur d’une variable (tant que c’est pas une erreur de syntaxe !) c’est d’envoyer quelquechose vers l’affichage (print_r, echo, var_dump). Seulement ça fait vachement moche, les informations sont incomplètes, le plus souvent tout s’affiche en haut de la page et on met beaucoup de temps à retrouver l’erreur.

Avec FirePHP, tous les objets que vous voulez suivre s’afficheront dans la console de Firebug (pour firefox, mais il est possible aussi de le faire marcher avec Chromium).

au lieu du traditionnel var_dump($this) je fais par exemple Fire::info($this) et ma console affiche toute les propriétés de l’objet (même les variables privées !). ça marche pour les chaine, les tableaux, les objets, et c’est récursif (comme php :D ).

On peut classer les informations en 4 catégories (log, info, warn, error), il est possible de les regrouper (Fire::group(« nom du groupe ») ). En production, un FirePHP::setEnabled(false) permet de ne rien afficher.

http://www.firephp.org/images/Screenshots/Sample1a.png

Comment ça marche ?

Au coeur de Firephp, une librairie php(5 :) ), qui ajoute des informations aux en-têtes HTTP.
FirePhp, le module firefox qui s’utilise avec firebug, vous permet d’afficher convenablement ces informations.

Prérequis donc :
– Firefox ou Chromium (j’ai pas testé sur Chromium car c’était des classes php déjà « bidouillées » assez méchament)
– avoir l’extension firebug (ou vous pouvez analyser les en-tête, mais bon courage !)
– disposer d’un serveur apache/php5 (wampserver sous windows fait également très bien l’affaire)

Pour une installation rapide et pratique, voici ma méthode :
chargez (dans votre bootstrap.php, ou index.php) un fichier qui contiens les 3 fonctions suivante :

function log($obj){
if(IS_PROD) Fire::log($obj);
}
function error($obj){
if(IS_PROD) Fire::error($obj);
else{
// petite astuce en plus : moi si on est en production,
//je veux logger les erreurs dans un fichier,
// avec en prime la pile d'apppel des fonctions/methodes
// pour en arriver là
$debug=date("H:i:s").":\r\n".</code>
<div id=":ut">print_r($obj,true)."\r\n".debug_backtrace();
file_put_contents(APPPATH."logs/".date("Y-m-d").".log",$debug,FILE_APPEND);
}
}
function errordie($obj){
if(IS_PROD) Fire::error($obj);
die();
else{
$debug=date("H:i:s").":\r\n".print_r($obj,true)."\r\n".debug_backtrace();
file_put_contents(APPPATH."logs/fatal-".date("Y-m-d").".log",$debug,FILE_APPEND);
}
}

Pour aller plus loin : http://www.firephp.org/
Toutes les ressources dont vous aurez besoin sont au QG : http://www.firephp.org/HQ/Use.htm