Traquer les variables indéfinies

Mammouth du PHP | 804 Messages

20 mai 2007, 17:07

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

ViPHP
ViPHP | 5924 Messages

20 mai 2007, 18:08

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é...

Mim
Eléphanteau du PHP | 19 Messages

20 mai 2007, 19:20

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... ;)

Mammouth du PHP | 991 Messages

21 mai 2007, 14:31

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
DevOps, Symfony4, Hoa

Mammouth du PHP | 804 Messages

21 mai 2007, 14:50

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

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

21 mai 2007, 15:42

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).
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Mammouth du PHP | 804 Messages

21 mai 2007, 18:33

merci pour l'info je vais potasser ca :wink:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

21 mai 2007, 19:16

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 ? :roll:

À 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.

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 20:17

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...

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

21 mai 2007, 21:31

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)

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 21:49

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 ?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

21 mai 2007, 22:16

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.

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 22:21

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 :)

Mammouth du PHP | 804 Messages

21 mai 2007, 23:02

à vraix dire non ce sont souvent les mêmes qui génèrent une ligne sur le fichier logs :wink:
À 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.