My.exception

Soyez le premier à donner votre avis sur cette source.

Vue 4 355 fois - Téléchargée 244 fois

Description

Simple mise en forme des exceptions PHP5.
Ajoute un extrait du code php qui a soulever l'exception.

Deux choses configurable :

ligne 28 : define( "NBR_SRC_LINES", 10 ); Le nombre de ligne du code source à afficher.

Ligne 32 : define( "DISPLAY", 1 ); Affichage par défaut de la fenêtre, 1 toutes les informations sont affichées, 0 Seul le titre est affiché.

Source / Exemple :


<?php
/**

  • Class MyException : Mise en forme des messages d'exception de PHP5
  • Class très simple d'utilisation
  • Liste des methodes
*
  • savgetArgs(); Mise en forme des arguments passés à la fonction qui
  • lance l'exception
  • random(); Génère une chaine de caractère aléatoire
  • __toString(); Format l'affichage de l'exception
* *
  • LICENSE: Vous êtes libres de reproduire, distribuer et communiquer cette création au public
  • et de modifier cette création.
  • Selon les conditions de paternité, pas d'utilisation commerciale, partage des cond
  • ions initiales à l'identique.
* // Nombre de ligne du code source à afficher define( "NBR_SRC_LINES", 10 ); // L'affichage des exceptions doit-il être afficher avec le detail ? // 1 affichage complet, 0 affichage réduit define( "DISPLAY", 1 ); // Valeurs CSS pour la mise en page des exceptions $css = <<<EOF <style type="text/css"> .exception { margin-top: 10px; background-color:#fff; } .exception h1{ padding: 5px; font-family: Arial, Helvetica, sans-serif; font-size: medium; background-color: #dedede; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #333; margin-bottom: 0px; margin-top: 0px; } .detail { padding: 5px; font-family: "Courier New", Courier, monospace; font-size: small; } .show, .hide { float: right; text-decoration:none; margin-left:10px; font-size:small; line-height:20px; } .exception { border: 1px solid #333; } .exception hr { height:1px; width:100%; color:#333; background:#333; border:none; } .exception .detail table { font-size: medium; } .exception .detail table tr td:first-child { background-color: #F3F3F3; border-right-width: 1px; border-right-style: solid; border-right-color: #333; height:20px; } .exception .detail table tr td:last-child { line-height:20px; } .exception .detail table tr td.lineError { background-color: #F00; color: #FFF; font-weight: bolder; } .exception .detail table tr td:last-child.impaire { background-color: #D1D1D1; } </style> EOF; // Inclusion de notre css dans la page echo $css; class MyException extends Exception { /**
  • Mise en forme de la chaine argument utilisé dans __toString
  • @arguments VOID
  • @return STRING $args Chaine de caractère contenant les arguments
  • de la fonctions jetant l'exception
  • /
protected function getArgs() { $class = Exception::getTrace(); $total = count( $class[0]['args'] ); $args = ''; $compteur = 0; if( $total !== 0 ) { foreach( $class[0]['args'] as $value ) { ++$compteur; if( $compteur === $total ) { $args .= ' \''.$value. '\' ' ; } else { $args .= ' \''.$value . '\' ' .','; } } } return $args; } /**
  • Génère une chaine de caractères alphanumérique aléatoire $string
  • de longueur $car
  • @arguments INT $car Longueur de la chaine souhaitée
  • @return STRING $string Chaine aléatoire
* protected function random( $car = 10 ) { $string = ""; $chaine = "abcdefghijklmnpqrstuvwxy"; srand( (double)microtime()*1000000 ); for( $i=0; $i<$car; $i++ ) { $string .= $chaine[ rand() % strlen( $chaine ) ]; } return $string; } /**
  • Affichage de l'exception, la valeure ajouté se trouve dans l'affichage
  • avec coloration syntaxique du code source du fichier jetant l'exception
*
  • @arguments VOID
  • @return STRING $div Affichage formaté de l'exception
*
  • /
public function __toString() { $id = self::random(); $class = Exception::getTrace(); $array = file( Exception::getFile() ) ; $start = Exception::getLine() - ( floor(NBR_SRC_LINES / 2 ) ) ; ( $start < 0 ) ? $start = 0 : NULL ; $end = Exception::getLine() + ( floor(NBR_SRC_LINES / 2 ) ) ; $style = '' ; if( DISPLAY === 0 ) { $style = ' style="display:none;" '; } $div = '<div class="exception">' . '<h1>Exception : ' . Exception::getMessage() . ' <a title="Déplier" id="showbuton' . $id . '" class="show" href="#" onclick="document.getElementById( \'' . 'detail' . $id . '\' ).style.display = \'block\'; return false;">&#9660;</a> <a title="Replier" id="hidebuton'.$id.'" class="hide" href="#" onclick="document.getElementById( \'' . 'detail' . $id . '\' ).style.display = \'none\'; return false;">&#9650;</a></h1>' . '<div id="detail'.$id.'" class="detail" ' . $style .'>' . '<span>Code</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#9474; ' . Exception::getCode() . '<br />' . '<span>Message</span>&nbsp;&nbsp;&nbsp;&#9474; ' . Exception::getMessage() . '<br />' . '<span>Dans</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#9474; ' . Exception::getFile() . ' ligne <strong>' . Exception::getLine() . '</strong><br />' . '<span>Depuis</span>&nbsp;&nbsp;&nbsp;&nbsp;&#9474; ' . $class[0]['file'] . ' ligne <strong>'.$class[0]['line'] . '</strong><br />' . '<span>Class</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#9474; ' . $class[0]['class'] . '<br />' . '<span>Fonction</span>&nbsp;&nbsp;&#9474; ' . $class[0]['function'] . '();<br />' . '<span>Context</span>&nbsp;&nbsp;&nbsp;&#9474; ' . $class[0]['class'] . $class[0]['type'] . $class[0]['function'] . '('. self::getArgs().');<br />' . '<hr />' . '<table width="100%" border="0" cellspacing="0" cellpadding="0">'; for( $i = $start - 1 ; $i <= $end - 1 ; $i++ ) { if( isset( $array[$i] ) ) { $arrayTemp = '<?php ' . $array[$i] ; if( $i == Exception::getLine() - 1 ) { $div .= '<tr><td width="5%" class="lineError">' . ( $i + 1 ) .'</td><td width="95%" valign="top" class="impaire">'. str_replace('<?php', '', highlight_string( $arrayTemp, TRUE ) ) . '</td></tr>'; } else { $div .= '<tr><td width="5%">' . ( $i + 1 ) .'</td><td width="95%" valign="top">'. str_replace('<?php', '', highlight_string( $arrayTemp, TRUE ) ) . '</td></tr>'; } } } $div .= '</table></div></div>'; return $div; } } ?>

Conclusion :


Exemple d'utilisation dans index.php
Source documentée.

Codes Sources

Ajouter un commentaire Commentaires
inwebo Messages postés 381 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
13 sept. 2010 à 11:34
Bonjour,

Remarque pertinente correction effectuée. Bien que je teste au préalable l'existence de $array[$i] avant d'en faire l'affichage, le script ne plante pas mais il mouline pour rien.

Merci pour cette remarque.
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
6 sept. 2010 à 09:11
Bonjour,
ce script me plait beaucoup !
Je ne l'ais pas testé, mais il me semble que si l'erreur survient disons en ligne 3 d'un script php, et que l'on a décidé d'afficher 10 lignes, $start va avoir la valeur -2 et $array[$i] va planter.

Sinon, très bien !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.