My.exception

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

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.