Mis à jour le jeudi 23 novembre 2017
  • 70 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Ce cours existe en livre papier.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

Au secours ! Mon script plante !

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Alors comme ça votre script ne marche pas, et PHP vous affiche des erreurs incompréhensibles ?
Pas de souci à vous faire : c'est tout à fait normal, on ne réussit jamais un script du premier coup (en tout cas, moi, jamais !).

Des milliers de messages d'erreur différents peuvent survenir (O.K., jusque-là rien de très rassurant), et je n'ai pas vraiment la possibilité de vous en dresser une liste complète… mais je peux vous présenter les erreurs les plus courantes, ce qui devrait résoudre la grande majorité de vos problèmes. ;-)

Les erreurs les plus courantes

Je pense qu'il est facile de parler d'erreurs « courantes », car vous verrez que certaines erreurs reviennent plus souvent que d'autres.

Nous allons passer en revue les erreurs suivantes :

  • Parse error ;

  • Undefined function ;

  • Wrong parameter count.

Parse error

Si on devait dire qu'il existe UNE erreur de base, ça serait très certainement celle-là. Impossible de programmer en PHP sans y avoir droit un jour.
Le message d'erreur que vous obtenez ressemble à celui-ci :

Parse error: parse error in fichier.php on line 15

Ce message vous indique une erreur dansfichier.phpà la ligne 15. Généralement, cela veut dire que votre problème se situe à la ligne 15, mais ce n'est pas toujours le cas (trop facile, sinon). Parfois c'est la ligne précédente qui a un problème : pensez donc à regarder autour de la ligne indiquée.

Avec un éditeur de texte spécialisé comme Notepad++, vous avez les numéros de ligne sur votre gauche, comme sur la figure suivante.

Numérotation des lignes dans Notepad++
Numérotation des lignes dans Notepad++

Bon, concrètement, qu'est-ce qu'une parse error ? Une « parse error » est en fait une instruction PHP mal formée. Il peut y avoir plusieurs causes :

  • Vous avez oublié le point-virgule à la fin de l'instruction. Comme toutes les instructions doivent se terminer par un point-virgule, si vous oubliez d'en mettre un, ça provoquera une parse error. Par exemple :

$id_news = 5

… génèrera une parse error. Si vous mettez le point-virgule à la fin, tout rentrera dans l'ordre !

$id_news = 5;
  • Vous avez oublié de fermer un guillemet (ou une apostrophe, ou une parenthèse). Par exemple :

echo "Bonjour !;

… il suffit de fermer correctement les guillemets et vous n'aurez plus de problème :

echo "Bonjour !";
  • Vous vous êtes trompés dans la concaténation, vous avez peut-être oublié un point :

echo "J'ai " . $age " ans";

Une fois l'erreur corrigée, ça donne :

echo "J'ai " . $age . " ans";
  • Il peut aussi s'agir d'une accolade mal fermée (pour unif, par exemple). Vérifiez que vous avez correctement fermé toutes vos accolades. Si vous oubliez d'en fermer une, il est probable que la parse error vous indique que l'erreur se trouve à la dernière ligne du fichier (c'est-à-dire à la ligne 115 si votre fichier comporte 115 lignes).

Donc, si on vous indique une erreur à la dernière ligne, il va probablement falloir relire tout le fichier PHP à la recherche d'une accolade mal fermée !

Si on vous dit que l'erreur est à la ligne 15 et que vous ne voyez vraiment pas d'erreur à cette ligne, n'hésitez pas à chercher l'erreur à la ligne juste au-dessus, elle s'y trouve peut-être !

Undefined function

Une autre erreur assez classique : la fonction inconnue. Vous obtenez ce message d'erreur :

Fatal Error: Call to undefined function: fonction_inconnue() in fichier.php on line 27

Là, il faut comprendre que vous avez utilisé une fonction qui n'existe pas.

Deux possibilités :

  • soit la fonction n'existe vraiment pas. Vous avez probablement fait une faute de frappe, vérifiez si une fonction à l'orthographe similaire existe ;

  • soit la fonction existe vraiment, mais PHP ne la reconnaît pas. C'est parce que cette fonction se trouve dans une extension de PHP que vous n'avez pas activée. Par exemple, si vous essayez d'utiliser la fonctionimagepngalors que vous n'avez pas activé la bibliothèque GD pour les images en PHP, on vous dira que la fonction n'existe pas. Activez la bibliothèque qui utilise la fonction et tout sera réglé.

Une dernière chose : il se peut aussi que vous essayiez d'utiliser une fonction qui n'est pas disponible dans la version de PHP que vous avez.
Vérifiez dans le manuel dans quelles versions de PHP cette fonction est disponible.

Wrong parameter count

Si vous utilisez mal une fonction, vous aurez cette erreur :

Warning: Wrong parameter count for fonction() in fichier.php on line 112

Cela signifie que vous avez oublié des paramètres pour la fonction, ou même que vous en avez trop mis.
Comme je vous l'ai appris dans le chapitre sur la doc' PHP, consultez le mode d'emploi de la fonction pour savoir combien de paramètres elle prend et quels sont ceux qui sont facultatifs.

Par exemple, la fonctionfopenrequiert au minimum deux paramètres : le premier pour le nom du fichier à ouvrir et le second pour le mode d'ouverture (en lecture seule, écriture, etc.). Si vous ne mettez que le nom du fichier à ouvrir, comme ceci :

$fichier = fopen("fichier.txt");

… vous aurez l'erreur « Wrong parameter count ». Pensez donc à rajouter le paramètre qui manque, par exemple comme ceci :

$fichier = fopen("fichier.txt", "r");

Quelques erreurs plus rares

Les erreurs PHP sont très variées. N'espérez donc pas que je vous fasse ici la liste des 3946 erreurs de PHP, j'en serais incapable (je ne les ai pas encore toutes eues, mais ça ne saurait tarder à l'allure à laquelle je vais).

Je vais vous montrer quelques erreurs un peu plus rares que « parse error », mais que vous rencontrerez probablement un jour. Si déjà je peux vous aider pour ces erreurs-là, ce sera bien.

Nous allons voir les erreurs :

  • « Headers already sent by… » ;

  • « L'image contient des erreurs » ;

  • « Maximum execution time exceeded ».

Headers already sent by…

Voilà une erreur classique quand on travaille avec les sessions ou avec les cookies :

Cannot modify header information - headers already sent by ...

Que doit-on comprendre par là ?
Les headers sont des informations d'en-tête qui sont envoyées avant toute chose au navigateur du visiteur. Elles permettent de dire « Ce que tu vas recevoir est une page HTML », ou « Ce que tu vas recevoir est une image PNG », ou encore « Inscris un cookie ».
Toutes ces choses-là doivent être effectuées avant que le moindre code HTML ne soit envoyé. En PHP, la fonction qui permet d'envoyer des informations de headers s'appelleheader(). On s'en est notamment servi dans le chapitre sur la bibliothèque GD pour indiquer que l'on envoyait une image et non pas une page HTML.

Ce que vous devez retenir, c'est que chacune des ces fonctions doit être utilisée au tout début de votre code PHP. Il ne faut RIEN mettre avant, sinon ça provoquera l'erreur « Headers already sent by… ».

Un exemple de code qui génère l'erreur :

<html>
<?php session_start(); ?>

Ici, j'ai eu le malheur de mettre un peu de code HTML avant lesession_start(), et c'est ce qui a provoqué l'erreur. Mettez lesession_start()en tout premier, et vous n'aurez plus de problème :

<?php session_start(); ?>
<html>

L'image contient des erreurs

C'est le navigateur qui vous donne ce message d'erreur et non pas PHP.
Ce message survient lorsque vous travaillez avec la bibliothèque GD. Si vous avez fait une erreur dans votre code (par exemple une banale « parse error »), cette erreur sera inscrite dans l'image. Du coup, l'image ne sera pas valide et le navigateur ne pourra pas l'afficher.

Bon d'accord, l'erreur est dans l'image. Mais comment faire pour faire « apparaître » l'erreur ?

Deux possibilités :

  • vous pouvez supprimer la ligne suivante dans votre code :

<?php header ("Content-type: image/png"); ?>

L'erreur apparaîtra à la place du message « L'image contient des erreurs » ;

  • vous pouvez aussi afficher le code source de l'image (comme si vous alliez regarder la source HTML de la page, sauf que là il s'agit d'une image).

Dans les deux cas, vous verrez le message d'erreur apparaître. À partir de là, il ne vous restera plus qu'à corriger le bug !

Maximum execution time exceeded

Ça, c'est le genre d'erreur qui arrive le plus souvent à cause d'une boucle infinie :

Fatal error: Maximum execution time exceeded in fichier.php on line 57

Imaginez que vous fassiez une bouclewhile, mais que celle-ci ne s'arrête jamais : votre script PHP va tourner en boucle sans jamais s'arrêter.

Heureusement, PHP limite le temps d'exécution d'une page PHP à 30 secondes par défaut. Si une page met plus de 30 secondes à se générer, PHP arrête tout en signalant que c'est trop long. Et il fait bien, parce que sinon cela pourrait ralentir tout le serveur et rendre votre site inaccessible !

Voici un exemple de bouclewhilequi ne s'arrêtera jamais :

<?php
$nombre = 5;
while ($nombre == 5)
{
    echo 'Zéro ';
}
?>

Comme vous pouvez le voir, un tel code PHP ne s'arrêtera jamais parce que$nombrevaut TOUJOURS 5…

Si vous avez donc l'erreur « Maximum execution time exceeded », il va falloir repérer une boucle qui ne s'arrête jamais, car c'est elle qui provoque ce problème.

Rassurez-vous : la limite est fixée à 30 secondes, mais vous n'y serez jamais confrontés. En général, un serveur met moins de 50 millisecondes à charger une page PHP (on est très loin des 30 secondes !).

Exemple de certificat de réussite
Exemple de certificat de réussite