joboy84 Posté 23 Mai 2009 Posté 23 Mai 2009 (modifié) Bonjour, Je souhaite mettre un gestionnaire d'erreurs personnalisé en place, et je bloque sur certains points... Par soucis de simplicité, j'ai simplifié mon code, qui normalement ajoute les données dans une base (cette partie fonctionne). <?php function GestionErreur($code, $msg, $file, $line) { $heureBug = date("h:i:s");$urlbug = $_SERVER['SCRIPT_URI'];$verifErreur = mysql_query('SELECT id FROM GestionErreurs WHERE lien="'.$urlbug.'" AND fichier="'.$file.'" AND ligne="'.$line.'"');if($errno == 'E_NOTICE' || $errno == 'E_USER_NOTICE'){ $Niveau = 'Basse'; echo"basse";}if($errno == 'E_ERROR' || $errno == 'E_CORE_ERROR' || $errno == 'E_COMPILE_ERROR' || $errno == 'E_USER_ERROR'){ $Niveau = 'Haute'; echo"haut";}if($errno == 'E_WARNING' || $errno == 'E_PARSE' || $errno == 'E_CORE_WARNING' || $errno == 'E_COMPILE_WARNING' || $errno == 'E_USER_WARNING'){ $Niveau = 'Moyenne'; echo"moyenne"; }if($Niveau == ''){ $Niveau = 'Inconnu'; echo"inconnu"; }echo'Priorité:'.$Niveau; // Arret execution du script die();}// On définit notre gestionnaire d'erreur personnaliséset_error_handler('GestionErreur');?> Le problème rencontré est celui de définir le niveau d'alerte pour le bug. Par exemple, j'ai généré volontairement une erreur E_USER_NOTICE: "Undefined index:nomSiteJeux", ou indiqué une variable n'existant pas..et cela m'indique tout le temps: Priorité Inconnu! ...Alors qu'a priori ce serait "Basse". De plus, si j'oubli par exemple un point virgule, cela me renvoie: Parse error: syntax error, unexpected T_VARIABLE in /home/www/503c69a9a240068c8059ec652aefc53b/web/liste-des-jeux.php on line 115 Pourtant en début de page j'ai mis error_reporting(0); ! Pourquoi me renvoie t-il l'erreur? S'agit t'il d'un autre type d'erreur? Merci Modifié 23 Mai 2009 par Monique Merci d'utiliser codebox pour plus de 10 lignes de code :)
Kioob Posté 24 Mai 2009 Posté 24 Mai 2009 Hello, ta variable $errno n'est initialisée nul-part, tu ne te serais pas trompé ? Sinon en passant : - un switch / case serait probablement plus parlant pour tes conditions sur $errno - le error_reporting n'est appelé que si le code est exécuté, ce qui n'est pas le cas lors d'un parse error - de manière générale error_reporting(0) est fortement déconseillé. Il vaut mieux privilégier un error_reporting(E_ALL) voir error_reporting(E_ALL | E_STRICT) mais par contre en désactiver l'affichage via display_errors tout en activant le traçage dans des logs.
joboy84 Posté 27 Mai 2009 Auteur Posté 27 Mai 2009 Effectivement j'avais fait une erreur de frappe Si je comprends bien, il vaut mieux mettre au début des pages php : error_reporting(E_ALL). Mais je ne comprends pas comment désactiver l'affichage des erreurs via display_errors et comment activer le tracage dans des logs... Je suis en hébergement mutualisé chez infomaniak...comment faire? c'est avec un htaccess?
Kioob Posté 27 Mai 2009 Posté 27 Mai 2009 Je ne connais pas les spécificités de l'hébergement infomaniak, fournissent ils un quelconque moyen de changer la configuration de PHP ? La méthode par htaccess ne fonctionne généralement qu'avec la version module de PHP. Sinon il reste la méthode ini_set(), mais ça ne fonctionnera pas pour les erreurs de syntaxe par exemple.
joboy84 Posté 27 Mai 2009 Auteur Posté 27 Mai 2009 Je peux que changer la config php avec htaccess... (j'ai désactivé les magic_quotes ainsi)
Kioob Posté 27 Mai 2009 Posté 27 Mai 2009 Tu peux donc utiliser la même chose pour changer les parametres display_errors, error_log et log_errors ; voir également error_reporting. Quelques explications : http://fr.php.net/manual/fr/errorfunc.configuration.php
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant