Le Blog

Le blog laboratoire de F.L.D. Studio
0

Debug mon PHP

Bug

Traquer le bug

On le sait debuger du PHP c'est compliqué car ce langage qui permet de programmer à l'aide d'un simple bloc-note ne dispose pas toujours d'un IDE (gratuit ou simple) qui lui soit dédié. On est donc loin (très loin) des outils de débuggage classique que l'on peut trouver avec les langages de développement de clients lourds type Visual Basic, Windev, Clarion, Delphi, etc... Adieu mode pas à pas, espionneur de variables, point d'arret et autre facilitateur d'interrogation de variables.

Echo de variables, print_r, var_dump() ou debug_backtrace() sont des outils rustiques qui quoiques fiables ne fournissent pas toujours une information très lisible.

On peut bien sur développer sa propre fonction de log des erreurs comme celle-ci qui permet de desactiver le gestionnaire d'erreurs de PHP et de loger les erreurs dans un fichier (ici : \errorlog\errorlog.html) 

set_error_handler('GestionErreur'); à placer avant utilisation de la fonction
//
function GestionErreur ($errno, $errstr, $errfile, $errline, $errcontext) // Gestionnaire Erreurs
// 
{ 
//print $errno.'<br>'; NE GERE QUE LES ERREURS MYSQL
/* global $sql; // test si probleme vient de sql
 if ( eregi('sql', $errstr) )
 {
 $MYSQL_ERRNO = mysql_errno();
 $MYSQL_ERROR = mysql_error();
 $errstr .= "Erreur MySQL : $MYSQL_ERRNO : $MYSQL_ERROR";
 $sql = "Erreur MySQL : $MYSQL_ERRNO : $MYSQL_ERROR";
 }
 else 
 {
 $sql = NULL;
 } 
*/ 
 $errorstring = '<h1>'.date('d-m-Y H:i:s') .'</h1>'; // Erreur
 $errorstring.= '<p><h2>Erreur Script</h2></p>'; 
 $errorstring .= "<p><br/>$errstr<br/>(# $errno).</p>\n"; 
 //if ($sql) $errorstring .= "<p>SQL query : <fieldset>$sql</fieldset></p>\n";
 $errorstring .= "<p>Erreur sur la ligne <b>$errline</b> du fichier '$errfile'.</p>\n";
 $errorstring .= "<p>Script : <b>'{$_SERVER['PHP_SELF']}'.</b></p>\n";
 
 if (isset($errcontext['this'])) // Environnement Objet 
 {
 if (is_object($errcontext['this'])) 
 {
 $errorstring.='<p><h3>Objet</h3></p>';
 $classname = get_class($errcontext['this']);
 $parentclass = get_parent_class($errcontext['this']);
 $errorstring .= "<p>Classe/Objet : '$classname', <br>Classe/Parent : '$parentclass'.</p>\n";
 }
 }
 
 $errorstring.='<p><h3>var_dump(SERVER)</h3></p>'; // Environnement Serveur
 ob_start(); // Envoi resultat de l'écran dans une variable 
 var_dump($_SERVER); // Dump variables environnement
 $errorstring.=ob_get_contents(); // Recupere buffer dans la variable
 ob_end_clean(); // Vide le buffer 
 
 $logfile = $_SERVER['DOCUMENT_ROOT'] .'/errorlog/errorlog.html'; // Définition chemin fichier log : (racine site)\errorlog\errorlog.html
 error_log($errorstring.'<hr/>', 3, $logfile); // Enregistrement de l'erreur
 die(); // Ne pas executer le gestionnaire d'erreur de PHP
}

ou utiliser des bibliothèque de codes prévues à cet effet.

Ressources

Extention Firefox

Catégories: Développement WEB

Tags: Outil

Commentaires: Pas de commentaires

Envoyer un commentaire