Stats
- 14 connecté(e)s
- 5160 membres
-
- 1218 news
- 3107 topics
- 70 articles
- 35 questions
- 144 sites
-
- St(e) Matthias
Proverbes
- L'empreinte d'un homme sur un autre est éternelle, aucun destin n'a traversé le nôtre impunément
- [ François Mauriac ]
Partenaires

error_reporting ou comment comprendre une erreur
Posté par Spirit-Wolf le 07/06/2006 dans la catégorie Bases de PHP
-
- il est utile parfois de comprendre les erreurs que sont site affiche, ainsi il existe une commande php permettant de définir le type d'erreur à afficher, au début de vos fichier ( ou sur l'index dans le cas d'un site moduler ), vous pouvez définir ceci :
Code :
// Définition :
// E_ERROR : erreur d'exécution de script
// E_WARNING : erreur d'exécution de script
// E_PARSE : erreur d'exécution de script
// E_NOTICE : Rapporter les E_NOTICE peut nous aider à améliorer notre scripts
// (variables non initialisées, variables mal orthographiées..)
error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
ainsi une variable inconnue vous afficher une E_NOTICE vous disant que tel variable n'existe pas ou est mal orthographier
ensuite il faut savoir qu'une erreur affichant
" parse error .... " signifie une erreur d'écriture
solution : relire votre code, vérifier que tous les quote simple ( ' ) et double ( " ) soit bien fermer
et échapper par un anti-slashes ( \ ) si nécessaire, que le ; indiquant la fin de chaine soit présent
!! un autre détails utile est de commenté sont code, de manière à ce que si un jour vous avez un problème vous puissiez copier / coller votre code avec les commentaire, facillitant ainsi la lecture et la compréhention pour ceux qui voudrais vous aider !!
enfin sachez que la plus part des erreur sont dues à un manque d'attention ( on à oublier un . ou encore un ") et la c'est AU SECOUR CA MARCHE PAS, pourtant en relisant votre source vous retrouver vous même d'ou viens l'erreur
idem pour les ERREUR SYNTHAXIQUE SQL, il parait logique que le problème vient d'une requête SQL et pas d'une boucle while()
voici un petite liste des erreur connues avec PHP ( %s, peut être soit une variable, soit une fonction etc.. )
"Notice: Undefined index: %s in fichier.php on line xxx "
habituellement survient lorsque l'on vérifie l'existence d'une variable
Code :
if($_POST['var']){ echo "patati patata"; }
Ceci vous retournera une NOTICE, par contre
Code :
if(isset($_POST['var'])){ echo "patati patata"; }
sera lui correct
Supplied argument is not a valid %s resource in fichier.php on line xxx "
Certaines fonctions travaillent avec des objets PHP, générés par les fonctions telles que FTP_connect, fopen, imagecreate, mysql_connect. Si ce genre d'erreur survient vérifier à :
- La casse (minuscules/majuscules) sur les noms des tables et champs mySql dans vos requetes !, il est extremement sensible à ça.
- Si vous utilisez mysql_query() en spécifiant dans les paramètres l'id de connexion, faites bien attention à l'ordre des paramètres : il faut d'abord mettre la chaîne contenant la requete, et ensuite l'id de connexion.
"Notice: Undefined offset: %s in fichier.php on line xxx "
vous tentez d'accéder à un caractère qui n'existe pas dans une chaine.
exemple:
Code :
$str=array('a','b','c');
$str[0] // est correct
$str[1] // est correct
$str[2] / est correct
$str[3] // provoquera cette erreur
"Notice: Undefined variable: %s in fichier.php on line xxx "
la variable n'existe pas ou mal orthographiée
- La variable est utilisée comme argument ou opérande avant d'avoir été initialisée.
Il est recommandé de toujours donner une valeur à une variable avant de l'utiliser, pour éviter les attaques par injection.
"Warning: Cannot send session cache limiter - headers already sent in fichier.php on line xxx "
Ceci concerne habituellement les sessions
- Si l'erreur s'affiche, vérifiez que vous n'avez pas d'espace ni de retour à la ligne avant la toute première balise ouvrante ( <?PHP )
- La session que vous utilisez repose sur les cookie, mais session_start() a été appelé beaucoup trop tard, et le script ne peux plus poser ses cookies de sessions.
Remontez session_start() au début de votre script.
- ne faite aucune instruction ni déclaration avant session_start(),
"Warning: failed to open stream in fichier.php on line xxx "
Les principales sources d'erreurs de fopen sont:
- l'inexistance du fichier
- le bon positionnement de ses droits
Ces deux points me semblent rapidement vérifiables, c'est donc à faire avant toute chose.
Il est donc primordiale de vérifier l'existence d'un fichier avant de l'ouvrir, avec un simple is_file c'est fesable
Code :
if(is_file("rep/fichier.php")){ echo "Ce fichier existe"; }
else{ echo "Ce fichier est introuvable"; }
"Fatal error: Call to a member function on a non-object in fichier.php on line xxx "
- Verifier qu'il n'y ait pas deux variables identiques...
- Vous essayez d'acceder à une méthode d'une classe, alors que l'objet de support n'est pas de cette classe.
- L'erreur peut aussi provenir d'un fichier importé
- Vérifiez aussi que l'objet a bien été instancié.
- Faire attention à la position de déclaration de la classe
Pour résoudre ce problème ne vous reste plus qu'a vérifier toute vos variable ou class mentionnées dans l'erreur
"Warning: Invalid argument supplied for foreach() in fichier.php on line xxx "
- foreach demande un tableau, et le nom d'un scalaire :
foreach($tableau as $v).
Assurez vous que l'ordre des arguments est bon, et que $tableau est bien un tableau avec is_array()
exemple avec is_array
Code :
if(is_array($tableau)){ echo "Ceci est un tableau"; }
else{ echo "Ceci n'est pas un tableau"; }
"Notice: Use of undefined constant %s - assumed "%s" in fichier.php on line xxx "
Plusieurs raison sont alors possible
- Survient lorsqu'on oublie le $ devant une variable
- cette erreur survient lorsque l'on oublie les simples quotes dans l'appel des varaibles quand on utilise la comande mysql_fetch_array avec la boucle while. La solution est la suivante :
Code :
while($ligne=mysql_fetch_array($resultat)){
$prenom=$ligne['var'] ;
}
Vous voyez que j'ai mis des simples quotes autour de la valeur var.
- cette erreur survient aussi dans le cas d'une constante inexistante
exemple
Code :
define("_NOM_DE_CONSTANTE", "valeur de constante");
echo NOMDEMACONSTANTE;
ceci vous retournera cette erreur, il faut donc bien vérifier l'orthographe et faire attention à la case ( majuscule/minuscule )
"Fatal error: Failed opening required "%s" (include_path="%s") in fichier.php on line xxx "
Cette erreur survient lorsque vous essayer d'inclure un fichier qui n'existe pas, d'ou l'importence de vérifier l'existence du fichier à inclure avec is_file()
voilà vous avez les principales erreurs qui peuvent survenir et leur solution, il existe bien d'autre erreur mais beaucoup moins courentes.
PHPortail.net © 2003 - 2008; Tous les droits réservés - Webmaster: Philippe Gamache
Site valide Xhtml Strict, CSS 2