Page 1 sur 1
Traquer les variables indéfinies
Posté : 20 mai 2007, 17:07
par dogmongo
Bonjour all,
Je souhaiterai savoir si il existe un petit scripts que je pourrai mettre dans mes pages pour connaitre les variables indéfinies, j'ai remarqué pas mal de trafic coté logs avec des error en masse "undefined variable" !
Si c'est possible ça me sera très utile pour corriger mes erreurs
Merci d'avance
Posté : 20 mai 2007, 18:08
par Sékiltoyai
Bah c'est bizarre ta question. Sont indéfinies toutes les variables qui ne sont pas définies. Les variables indéfinies, il y en a une infinité...
Posté : 20 mai 2007, 19:20
par Mim
Normalement, l'erreur s'affiche comme ça :
Notice: Undefined variable: nom_de_la_variable in __FILE__ on line __LINE__
Et tu connais ainsi directement les noms des variables que tu utilises sans les avoir initialisées, et tu peux rectifier le tir... ;)
Posté : 21 mai 2007, 14:31
par thehawk
tu peut créer un script qui recupere les fichiers d'erreurs , puis avec une expressions regulieres choper les nom de viables puis te les mettres dans une base de données ou autres
Posté : 21 mai 2007, 14:50
par dogmongo
Mim tu as tout à fais raison
Code : Tout sélectionner
[client 0.0.0.0] PHP Notice: Undefined variable: mavariable in /var/www/vhosts/monsite.com/httpdocs/mapage.php on line 25
que veux tu dire ? je peu faire ca sur chaque site ?
recupere les fichiers d'erreurs
Posté : 21 mai 2007, 15:42
par mere-teresa
Regarde la gestion des erreurs dans la doc :
Error_log() te permet d'envoyer les erreurs dans un fichier ou par e-mail, etc...http://fr3.php.net/manual/fr/function.error-log.php
Et encore mieux, set_error_handler() te permet de créer ta propre fonction pour gérer les erreurs (ex : variable indéfinie ? ==> tu la crées).
Posté : 21 mai 2007, 18:33
par dogmongo
merci pour l'info je vais potasser ca

Posté : 21 mai 2007, 19:16
par Hubert Roksor
Et encore mieux, set_error_handler() te permet de créer ta propre fonction pour gérer les erreurs (ex : variable indéfinie ? ==> tu la crées).
Hmm, et comment tu la crées dans le bon scope ?
À part ça euh... il ne doit pas y en avoir tant que ça de variables indéfinies, si ? Tu auras plus vite fait de les corriger à la main à mon avis.
Posté : 21 mai 2007, 20:17
par Sékiltoyai
Les exceptions seraient pas mieux adaptées que le error_handler ? Je demande ca parce que j'ai prévu de les utiliser mais je ne sais pas trop comment php les gère...
Posté : 21 mai 2007, 21:31
par Hubert Roksor
j'ai prévu de les utiliser mais je ne sais pas trop comment php les gère...
Pas. Voilà comment il les gère... Seules certaines extensions génèrent des exceptions, mais tu peux utiliser ton propre error_handler pour transformer les erreurs en exception. (simplement en générant une exception dans ton gestionnaire d'erreur)
Posté : 21 mai 2007, 21:49
par Sékiltoyai
Arf, c'est relou ca...
Et le error_handler il est exécuté dans le contexte courant ? C'est à dire que si on a ce code :
<?php
function e_handler($errno, $message, $file, $line)
{
throw(new Exception());
}
set_error_handler('e_handler');
try
{
$test = array();
echo $test['null'];
}
catch(Exception e)
{
echo 'erreur';
}
?>
L'erreur sera captée par le error_handler et l'exception lancée par celui ci sera captée ?
Posté : 21 mai 2007, 22:16
par Hubert Roksor
L'exception est générée dans le contexte du gestionnaire d'erreur. Si tu veux accéder au fichier et à la ligne de l'erreur il te faut créer une classe qui étend la classe Exception et à laquelle tu passe d'une façon ou d'une autre le numéro de ligne, nom du fichier, etc...
<?php
function e_handler($errno, $message, $file, $line)
{
throw(new Exception($message));
}
set_error_handler('e_handler', E_ALL | E_STRICT);
try
{
$test = array();
echo $test['null'];
}
catch (Exception $e)
{
echo 'Exception: ', $e->getMessage(), ' ligne ', $e->getLine();
}
Cet exemple dira "Exception ... ligne 5", ligne qui a lancé l'exception.
Posté : 21 mai 2007, 22:21
par Sékiltoyai
En fait, je ne pensais pas tellement à récupérer la ligne, je me demandais juste si la ligne
echo $test['null'];
équivalait au simple appel de la fonction :
e_handler(0, '', __FILE__, __LINE__);
Mais à te lire, ca semble être le cas...
Au passage, merci de tes renseignements, ca me sera utile

Posté : 21 mai 2007, 23:02
par dogmongo
à vraix dire non ce sont souvent les mêmes qui génèrent une ligne sur le fichier logs
À part ça euh... il ne doit pas y en avoir tant que ça de variables indéfinies, si ? Tu auras plus vite fait de les corriger à la main à mon avis.