Gestionaire parse error

Gestionaire parse error - PHP - Programmation

Marsh Posté le 09-08-2005 à 20:34:24    

Bonjour,  
 
J'aimerai beaucoup personnaliser les parses error genre mettre une autre phrases que PARSE ERROR  
 
Et aussi j'aimerai faire un compteur de parse error (a chasue parse error incrémenter un variable dans un cham d'une table sql  
 
c'est possible ?

Reply

Marsh Posté le 09-08-2005 à 20:34:24   

Reply

Marsh Posté le 09-08-2005 à 21:41:24    

Je pense que oui. Il existe une fonction qui se déclenche sur événement (en cas d'erreur), qui permet de trapper ce genre de problème :)  
 
Le problème, c'est que je connais plus son nom [:gratgrat]

Reply

Marsh Posté le 09-08-2005 à 21:42:36    

erf ... pitetre que ça te revenir ... ou a quelqu'un d'autre

Reply

Marsh Posté le 09-08-2005 à 21:51:43    

Je crois que c'est ca :
http://fr2.php.net/manual/fr/funct [...] andler.php
 
(suffisait de faire une recherche sur "handler" :o )

Reply

Marsh Posté le 09-08-2005 à 22:22:06    

"Les types d'erreur suivants ne peuvent pas être gérés avec cette fonction : E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, ".....

Reply

Marsh Posté le 09-08-2005 à 22:39:18    

Zut :(
 
Peut être celle ci, mais faut tester pour savoir si elle est bien appellée dans les cas qui t'intéressent [:figti]  
(en fait, c'est à celle ci que je pensais au début, même si ce n'est pas tout à fait ce dont tu as besoin :o )


Message édité par mrbebert le 09-08-2005 à 22:39:34
Reply

Marsh Posté le 10-08-2005 à 09:21:00    

Quelqu'un a une idée ?

Reply

Marsh Posté le 10-08-2005 à 09:53:44    

Je crois qu'il te reste a regarder du coté du logger ...

Reply

Marsh Posté le 10-08-2005 à 09:57:23    

une idée simple :
une parse error signifie que ton code php est syntaxiquement incorrect (ie ce n'est pas du php !) Donc la meilleure chose que tu puisses faire est sans doute de faire plus attention au programme que tu écris, non ?

Reply

Marsh Posté le 10-08-2005 à 10:08:32    

esox_ch a écrit :

Je crois qu'il te reste a regarder du coté du logger ...


Logger ?

mcjoedassin a écrit :

une idée simple :
une parse error signifie que ton code php est syntaxiquement incorrect (ie ce n'est pas du php !) Donc la meilleure chose que tu puisses faire est sans doute de faire plus attention au programme que tu écris, non ?


non, je suis en train de developper un truc et j'aimerai me rendre compte a la fin combien j'ai fais de parse error.


Message édité par Profil supprimé le 10-08-2005 à 10:09:11
Reply

Marsh Posté le 10-08-2005 à 10:08:32   

Reply

Marsh Posté le 10-08-2005 à 10:10:27    

mcjoedassin a écrit :

une idée simple :
une parse error signifie que ton code php est syntaxiquement incorrect (ie ce n'est pas du php !) Donc la meilleure chose que tu puisses faire est sans doute de faire plus attention au programme que tu écris, non ?


 
Biensur qu'il doit faire attention, mais rien ne l'empeche de vouloir modifier l'output ... Ca peut etre particulierement utile si tu utilises une interface de lecture fait maison ... Par exemple si le resultat de ses page est lu par un bot, il se peut qu'il prefere changer la mise en page de son erreur pour qu'elle soit mieux comprise par le bot ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 10-08-2005 à 10:11:16    


 
TU vas sur php.net et tu cherches, je suis sur que c'est a ta portée


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 10-08-2005 à 10:18:43    

Ah en fait je génère un log d'erreur, puis je le parse en php et dès qu'il trouve "parse error" il incrémente le champ de la table compteur_de_parse_error ..... non ?

Reply

Marsh Posté le 10-08-2005 à 10:33:32    

euh j'ai cherché et j'ai trouvé mais ....
ce code est disponible sur php.net
 

Code :
  1. <?php
  2. // Nous allons faire notre propre gestion
  3. error_reporting(0);
  4. // Fonction spéciale de gestion des erreurs
  5. function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
  6. {
  7.    // Date et heure de l'erreur
  8.    $dt = date("Y-m-d H:i:s (T)" );
  9.    // Définit un tableau associatif avec les chaînes d'erreur
  10.    // En fait, les seuls niveaux qui nous interessent
  11.    // sont E_WARNING, E_NOTICE, E_USER_ERROR,
  12.    // E_USER_WARNING et E_USER_NOTICE
  13.    $errortype = array (
  14.                E_ERROR          => "Erreur",
  15.                E_WARNING        => "Alerte",
  16.                E_PARSE          => "Erreur d'analyse",
  17.                E_NOTICE          => "Note",
  18.                E_CORE_ERROR      => "Core Error",
  19.                E_CORE_WARNING    => "Core Warning",
  20.                E_COMPILE_ERROR  => "Compile Error",
  21.                E_COMPILE_WARNING => "Compile Warning",
  22.                E_USER_ERROR      => "Erreur spécifique",
  23.                E_USER_WARNING    => "Alerte spécifique",
  24.                E_USER_NOTICE    => "Note spécifique",
  25.                E_STRICT          => "Runtime Notice"
  26.                );
  27.    // Les niveaux qui seront enregistrés
  28.    $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
  29.  
  30.    $err = "<errorentry>\n";
  31.    $err .= "\t<datetime>" . $dt . "</datetime>\n";
  32.    $err .= "\t<errornum>" . $errno . "</errornum>\n";
  33.    $err .= "\t<errortype>" . $errortype[$errno] . "</errortype>\n";
  34.    $err .= "\t<errormsg>" . $errmsg . "</errormsg>\n";
  35.    $err .= "\t<scriptname>" . $filename . "</scriptname>\n";
  36.    $err .= "\t<scriptlinenum>" . $linenum . "</scriptlinenum>\n";
  37.    if (in_array($errno, $user_errors)) {
  38.        $err .= "\t<vartrace>".wddx_serialize_value($vars,"Variables" )."</vartrace>\n";
  39.    }
  40.    $err .= "</errorentry>\n\n";
  41.  
  42.    // sauvegarde de l'erreur, et mail si c'est critique
  43.    error_log($err, 3, "/usr/local/php4/error.log" );
  44.    if ($errno == E_USER_ERROR) {
  45.        mail("phpdev@example.com","Critical User Error",$err);
  46.    }
  47. }
  48. function distance($vect1, $vect2)
  49. {
  50.    if (!is_array($vect1) || !is_array($vect2)) {
  51.        trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR);
  52.        return NULL;
  53.    }
  54.    if (count($vect1) != count($vect2)) {
  55.        trigger_error("Vectors need to be of the same size", E_USER_ERROR);
  56.        return NULL;
  57.    }
  58.    for ($i=0; $i<count($vect1); $i++) {
  59.        $c1 = $vect1[$i]; $c2 = $vect2[$i];
  60.        $d = 0.0;
  61.        if (!is_numeric($c1)) {
  62.            trigger_error("Coordinate $i in vector 1 is not a number, using zero",
  63.                            E_USER_WARNING);
  64.            $c1 = 0.0;
  65.        }
  66.        if (!is_numeric($c2)) {
  67.            trigger_error("Coordinate $i in vector 2 is not a number, using zero",
  68.                            E_USER_WARNING);
  69.            $c2 = 0.0;
  70.        }
  71.        $d += $c2*$c2 - $c1*$c1;
  72.    }
  73.    return sqrt($d);
  74. }
  75. $old_error_handler = set_error_handler("userErrorHandler" );
  76. // constante non définie, qui génère une alerte
  77. $t = I_AM_NOT_DEFINED;
  78. // définition de quelques vecteurs
  79. $a = array (2, 3, "foo" );
  80. $b = array (5.5, 4.3, -1.6);
  81. $c = array (1, -3);
  82. // génère une erreur utilisateur
  83. $t1 = distance ($c, $b)."\n";
  84. // génère une erreur utilisateur
  85. $t2 = distance ($b, "i am not an array" )."\n";
  86. // Génère une alerte
  87. $t3 = distance ($a, $b)."\n";
  88. ?>


je le lance hop il me log les erreurs, j'ajoute une erreur de type parse genre $ok = "blop" (pas de point virgule) et il me log pas .... par contre il l'affiche (parse error on line machin)....

Reply

Marsh Posté le 10-08-2005 à 10:37:56    

c'est marqué ça aussi
It seems that parse errors will be handled internally even if you've designated your own error handler; that is, your error-handling function will /not/ be called on a parse error.
 
par ailleurs, un parser ne continue pas toujours après avoir trouvé une erreur ...

Reply

Marsh Posté le 10-08-2005 à 10:41:23    

je fais quoi alors ? si il n'y pas de fonction pour logger les parses error ?

Reply

Marsh Posté le 10-08-2005 à 10:44:54    

écris des programmes syntaxiquement correct, c'est simple !
il suffit que ton script passe une fois au parser sans parse error et il n'en génèrera jamais plus sur ce fichier !

Reply

Marsh Posté le 10-08-2005 à 10:45:58    

non mais j'ai besoin de ce compteur de parse error alors ne me dit pas ça ! Mais si tu ne sais pas plus que moi comment faire spa grave hein !

Reply

Marsh Posté le 10-08-2005 à 11:34:35    

Je parle pas d'error reporting je parle d'error logging ... Si tu matte dans les fonctions de log d'erreur tu verras que tu peux rediriger le flux vers plusieurs types d'action ... Tu patches un peu et tu as ton compteur


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 10-08-2005 à 11:52:28    

http://www.google.fr/search?hl=fr& [...] +php&meta=
.... et je tombe sur ce que j'ai montré plus haut :(

Reply

Marsh Posté le 10-08-2005 à 12:07:26    


 
Je sais franchement pas si tu peux faire ça.
 
Parse error intervient quand le moteur de php charge un fichier php. La première chose qu'il fait c'est qu'il regarde si le fichier est correct. A la première erreur trouvée, il sort un PARSE ERROR (et il n'y en a qu'un, même si il y a deux erreurs dans un fichier).
 
Donc si il y a un parse error dans index.php, tu ne peux rien faire. Php ouvre index.php, trouve une erreur, affiche l'erreur et s'arrête (aucun code php n'est executé).
 
Si un parse error arrive dans un include, donc après que index.php est été considéré sans erreur et que du code php a été executé, je ne sais pas ce qu'il se passe :D . Mais il y a fort a parier que php stop tout execution.
 
PS : en cherchant un peu sur google :
http://www.nexen.net/docs/php/anno [...] -parse.php
http://answers.google.com/answers/threadview?id=545112

Reply

Marsh Posté le 10-08-2005 à 12:11:57    

ah ben merci pascal_ ! je suis un peu déçu mais je préfère savori que c'est impossible que de cherche rparotuto depuis hier sans trouver

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed