2009-08-07 5 views
3

Je ne sais pas si le terme que j'utilise est juste, mais ce que je cherche est quelque chose de similaire à ce que vous obtenez avec zend server. Jetez un oeil à this.Erreur PHP wrapper?

Il ressemble à une erreur, il déverse la requête avec une trace de pile et des paramètres de fonction ainsi que d'autres informations. Il vous permet de le voir dans une belle interface. Je sais que ce ne serait pas difficile à faire moi-même car vous pouvez toujours faire des rappels d'erreur, mais si quelque chose comme ça existe (gratuitement) je préférerais l'utiliser au lieu de réinventer la roue.

+0

Je serais ravi de savoir si quelque chose comme ça existe ... même si je serais un peu déçu car j'ai déjà passé de nombreuses heures à développer le mien ... – Josh

Répondre

3

Je ne fais pas de n'importe quel outil qui le fera automatiquement pour vous; mais il n'est pas difficile à développer, je pense ... Pourtant, je l'admets, il faudra un certain temps :-(

Juste pour jeter quelques notes, la meilleure solution qui me vient à l'esprit pour connecter le erreurs est:

  • enregistrer votre propre gestionnaire d'erreur avec set_error_handler
  • Code
  • la fonction, de sorte qu'il enregistre les erreurs + GET/données POST
    • peut-être que cela pourrait/aurait/devrait être fait dans une sorte de base de données, ou fichier structuré (une base de données SQLite, peut-être: li ght, rapide, facile à utiliser, ne dépend pas d'un serveur de base de données externe, ...), et pas seulement les fichiers simples; serait plus facile à traiter plus tard.
  • développer l'application de "reporting" ...
    • C'est la chose qui va prendre un certain temps, bien que, comme vous le dites ...


Utilisation de la exemple qui est donné sur la page de manuel, quelque chose comme cela ferait probablement: d'abord, déclarez votre fonction de gestion des erreurs:

function myErrorHandler($errno, $errstr, $errfile, $errline) 
{ 
    $str = ''; 
    switch ($errno) { 
     case E_USER_ERROR: 
      $str .= "<b>My ERROR</b> [$errno] $errstr<br />\n"; 
      $str .= " Fatal error on line $errline in file $errfile"; 
      $str .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n"; 
      break; 
     case E_USER_WARNING: 
      $str .= "<b>My WARNING</b> [$errno] $errstr<br />\n"; 
      break; 
     case E_USER_NOTICE: 
      $str .= "<b>My NOTICE</b> [$errno] $errstr<br />\n"; 
      break; 
     default: 
      $str .= "Unknown error type: [$errno] $errstr<br />\n"; 
      break; 
    } 
    $str .= print_r($_GET, true); 

    $str .= "\n"; 
    file_put_contents(dirname(__FILE__) . '/log.txt', $str, FILE_APPEND); 

    /* Don't execute PHP internal error handler */ 
    return true; 
} 

Il obtient des informations de l'erreur, prépare des messages d'erreur spécifiques qui dépendent du type d'erreur, et met tout cela et un vidage de $_GET dans un fichier.
(Bien sûr, votre serveur Web doit être en mesure de créer/écrire dans ce fichier)


Ensuite, vous enregistrez ce gestionnaire:

$old_error_handler = set_error_handler("myErrorHandler"); 


Et enfin, juste pour tester , vous déclenchez des erreurs:

trigger_error("test of E_USER_ERROR", E_USER_ERROR); 
trigger_error("test of E_USER_WARNING", E_USER_WARNING); 
trigger_error("test of E_USER_NOTICE", E_USER_NOTICE); 


Maintenant, à condition d'appeler la page avec quelque chose comme ceci: http://tests/temp/temp.php?a=10&test=glop&hello=world; vous obtiendrez un journal d'erreur contenant ceci:

$ cat log.txt 
<b>My ERROR</b> [256] test of E_USER_ERROR<br /> 
    Fatal error on line 34 in file /home/squale/developpement/tests/temp/temp.php, PHP 5.3.0RC4 (Linux)<br /> 
Array 
(
    [a] => 10 
    [test] => glop 
    [hello] => world 
) 

<b>My WARNING</b> [512] test of E_USER_WARNING<br /> 
Array 
(
    [a] => 10 
    [test] => glop 
    [hello] => world 
) 

<b>My NOTICE</b> [1024] test of E_USER_NOTICE<br /> 
Array 
(
    [a] => 10 
    [test] => glop 
    [hello] => world 
) 

Dans ce cas, il est tout à fait un désordre laid ... Mais vous voyez sans doute le point; maintenant, à vous de construire sur cela pour obtenir exactement ce que vous voulez ;-)


Bien sûr, maintenant, il faut aussi développer l'interface de reporting (conviviale, rapide, utilisable, et tout cela. ..); ce sera probablement la plus longue partie de mettre en place :-(

Et, malheureusement, je ne sais pas un outil qui pourrait vous aider ...
(Peut-être, si vous commencez quelque chose développer, il pourrait être libéré comme open source? Cela serait probablement utile à d'autres ;-) Je pourrais être intéressé par certains projets, et je suis sûr que je ne suis pas le ;-))

Toujours, amusez-vous!

+0

+1: réponse très complète. – Josh

+0

Merci :-) (En fait, quelques collègues et moi, au travail, avons pensé que PHP manque de ce genre d'outil de reporting ... Mais, malheureusement, nous n'avons pas eu le temps de construire une belle solution .. Nous nous sommes retrouvés avec des fichiers journaux bruts contenant des vidages de données comme l'exemple que j'ai reproduit plus tôt); aurait été bien d'avoir une solution existante, bien que ^^ –

2

Je ne connais aucun outil gratuit pour analyser et afficher les journaux d'erreurs PHP.

J'ai écrit des fonctions de journalisation pour plusieurs projets en utilisant set_error_handler() et set_exception_handler().

Mes classes de gestionnaire font fondamentalement un print_r() de _GET, _POST, _SERVER, _COOKIE, _SESSION, etc et m'envoyer un email/SMS. Fonctionne très bien la plupart du temps. Et j'aime recevoir les notifications d'erreurs rapides. (donc je peux le réparer rapidement).

Vous avez mis en évidence une lacune dans les outils de communauté pour PHP. Quelqu'un doit démarrer un projet pour enregistrer les erreurs avec une interface utilisateur sympa pour analyser/afficher les journaux. Hmm ...