blog.logout.fr Il est (vraiment) temps de faire une pause…

26Mar/081

Apache en difficulté

Ça fait deux fois que je me fais avoir là dessus au boulot, alors je me suis dit que ça pourrait peut-être servir à quelqu'un de le savoir. Parfois, en chargeant une page du site PHP sur lequel on travaille, on se prend une page blanche dans la figure. Blanche dans le genre "pas de contenu à charger", pas d'erreur rien, aucun message.
Au bout d'un moment, on a quand même remarqué ceci dans les logs d'Apache :

[notice] Server built: Jan 9 2007 23:17:20
[notice] Parent: Created child process 2724
[notice] Child 2724: Child process is running
[notice] Child 2724: Acquired the start mutex.
[notice] Child 2724: Starting 250 worker threads.
[notice] Child 2724: Starting thread to listen on port 80.
[notice] Parent: child process exited with status 3221225477 -- Restarting.
[notice] Apache/2.2.4 (Win32) PHP/5.2.3 configured -- resuming normal operations

Donc en gros :

  • On demande la page à Apache
  • Quelque chose d'affreux se produit
  • Apache crash misérablement
  • Apache redémarre tout seul
Crash d'un hélicoptère Apache
Crash d'un hélicoptère Apache (pour ceux qui n'ont pas compris)

Ne cherchez pas sur Google, vous ne trouverez aucune explication intéressante. En fait ce problème vient presque à chaque fois d'une fonction récursive incorrecte. Si une fonction récursive s'emballe, se met à se rappeler elle-même indéfiniment et qu'en plus elle se charge de pas mal de calculs et/ou d'affichages, vous aurez à coup sûr cette erreur. La solution rapide et efficace, c'est de faire des echo 'debug'; return; dans le code, en partant du haut de la page et en descendant l'arbre d'inclusion petit à petit, jusqu'à trouver l'appel qui fait tout crasher. Le problème étant bien sûr que la fonction ne s'emballe pas forcément dans tous les cas ni sur toutes les pages... donc le débuggage peut s'avérer tordu.

Maintenant, vous saurez.
Testé et approuvé sur Apache 2.2.x, PHP 5.2.x, sous Windows XP (donc probablement tous les Windows) et Unix (Gentoo).

Commentaires (1) Trackbacks (0)
  1. Dans le même genre, utiliser un module PHP qui n’est pas installé provoque le même symptôme au lieu de faire un bête erreur.
    Testé et approuvé sous Debian (PHP 5.2 ; Apache 2.2) avec php_mysql pas installé §


Leave a comment

Aucun trackbacks pour l'instant