Quelques erreurs plus rares



Les erreurs PHP sont très variées, et je ne parle même pas des erreurs SQL. 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'appelle header(). 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.


Il y a d'autres fonctions qui envoient des headers toutes seules. C'est le cas de session_start() et de setcookie().


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 le session_start(), et c'est ce qui a provoqué l'erreur. Mettez le session_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 boucle while, 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 boucle while qui 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 $nombre vaut 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 !).

Créé avec HelpNDoc Personal Edition: Générateur gratuit de livres électroniques et documentation