Démarrage Apache et chargement de module

sylver

Membre actif
23 Septembre 2003
343
39
Bonjour à tous

J'ai voulu installer PHP sur mon Jaguar pour faire mes développements en local.
J'ai donc modifié le httpd.conf en décommentant les quelques lignes pour charger le module.
La version PHP livré en bundle avec Jaguar étant vieille (4.1) j'ai installé PHP 4.3.4 via le package fourni par entropy.ch.

Donc jusqu'à hier, tout marchait très bien, j'ai commencé à développer mon script PHP.

Aujourd'hui j'installe la mise à jour de la sécurité pour Jaguar (qui apporte une amélioration pour Apache).
Après installation de la MAJ et redémarrage du mac, je lance mon serveur Apache, et au chargement il m'affiche le message suivant
Bloc de code:
[Wed Apr  7 22:58:00 2004] [warn] module mod_php4.c is already added, skipping
Malgré cela, Apache démarre tout de même.

Je me demande quand même ce que ça veut dire, étant donné que je n'ai touché à rien. Je vais alors voir le fichier httpd.conf pour vérifier, et je remarque que les lignes que j'avais décommenté quelques jours avant pour activer PHP (en l'occurence LoadModule php4_module et AddModule mod_php4.c) sont à nouveau commentées !
Pour vérifier si PHP tourne ou pas, je lance mon script PHP sur lequel je travaillais, et il marche. Ce qui veut dire que PHP tourne alors que les lignes dans httpd.conf sont commentées
sick.gif
ooo.gif

Et il y a cet avertissement au démarrage d'Apache, qui me dit que module mod_php4.c est déjà ajouté.

Alors je n'y comprends plus grand chose. Apparemment la MAJ Sécurité a modifié httpd.conf, car un ls -l me donne une heure de modification qui correspond à celle de l'installation de la mise à jour.
Mais bizarrement il n'a pas touché à d'autres modifications que j'avais faites dans le fichier, comme l'ajout des lignes AddType application/x-httpd-php .php ou encore l'ajout d'un serveur virtuel dans la directive <VirtualHost>.

Voilà ou j'en suis donc. Peut-être qu'en décommentant à nouveau les lignes tout rentrerait dans l'ordre, mais j'aimerais comprendre ce qui s'est passé. Pourquoi, si les lignes sont commentées, ai-je eu un warning au démarrage d'Apache m'indiquant que le module est déjà ajouté ? Et pourquoi PHP fonctionnait ? Y a-t-il moyen de savoir ce que la MAJ a fait à Apache (j'ai cherché dans la knowledge base sans rien trouver) ?

Merci d'avoir lu jusqu'au bout (au moins personne ne pourra dire que je n'ai pas détaillé mon problème
up.gif
)
 
C'est de nouveau moi.

J'ai un début de réponse. Apparemment la mise à jour de sécurité n'y est pour rien. D'après les logs, l'apparition du warning au démarrage d'Apache est servenu juste après l'installation du package de entropy.ch.
Par contre, le package de entropy.ch modifie bien le fichier httpd.conf. Il commente à nouveau les lignes LoadModule et AddModule qui étaient décommentées, et à la fin il rajoute un Include vers un fichier httpd.conf.php qui se trouve dans le répertoire d'installation du package (en l'occurence /usr/local/php/). Dans ce fichier httpd.conf.php il y a deux lignes, la première contient LoadModule vers le module php4 installé par le package, la deuxième AddModule mod_php4.c.

Donc j'ai un peu mieux compris ce qui s'est passé : le package de entropy.ch commente les lignes LoadModule et AddModule de httpd.conf pour les remplacer par les siennes qui se trouvent dans httpd.conf.php.

Par contre, ce que je n'explique pas, c'est qu'au démarrage d'Apache j'ai toujours le même warning, me disant que le module mod_php4.c est déjà ajouté, comme si durant le démarrage, Apache lisait deux fois l'instruction AddModule mod_php4.c. Pourtant il n'y en a qu'une qui soit active. Y aurait-il d'autres fichiers qui pourraient contenir cette instruction et qui seraient lus par Apache au démarrage ?

Merci
 
C'est toujours moi.

J'ai finalement réussi à virer ce warning, alors je vous explique. Le fichier httpd.conf se présente à peu près comme ceci :
<font class="small">Code:</font><hr /><pre>
LoadModule alias_module libexec/httpd/mod_alias.so
LoadModule rewrite_module libexec/httpd/mod_rewrite.so
...
LoadModule php4_module libexec/httpd/libphp4.so
LoadModule hfs_apple_module libexec/httpd/mod_hfs_apple.so
LoadModule rendezvous_apple_module libexec/httpd/mod_rendezvous_apple.so
# Reconstruction of the complete module list from all available modules
# (static and shared ones) to achieve correct module execution order.
# [WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE UPDATE THIS, TOO]
ClearModuleList
AddModule mod_alias.c
AddModule mod_rewrite.c
...
AddModule mod_php4.c
AddModule mod_hfs_apple.c
AddModule mod_rendezvous_apple.c
</pre><hr />

Donc on a une série de directives LoadModule, puis quelques lignes de commentaires qui expliquent que si on modifie quelque chose dans cette série, il faut également modifier dans la série qui suit, qui est une suite de directives AddModule.
Et vous remarquerez qu'entre ces deux séries, il y a une directive ClearModuleList ligne n°10 (voir la documentation Apache). C'est elle qui m'a mis la puce à l'oreille, puisque litéralement elle signifie "Effacer la liste des modules". Ce qui voudrait dire que cela annule en quelque sorte les directives LoadModule précédentes, et qu'ensuite les directives AddModule reconstruisent la liste (c'est d'ailleurs ce que précise la ligne n°7 dans le code ci-dessus).

Donc les lignes LoadModule php4_module et AddModule mod_php4.c sont séparées par cette directive.

Mais avec l'installation du fameux package, ce dernier a mis ces deux directives l'une après l'autre, dans un fichier inclus à la fin du fichier httpd.conf. Et c'est l'absence de ClearModuleList entre les deux qui faisait apparaître ce fameux warning au démarrage d'Apache.
Maintenant tout marche comme avant.

Donc voilà, mon problème est résolu. Mais j'aimerais quand même comprendre à quoi ça sert de charger une liste de modules avec des directives LoadModule, puis de l'effacer, et d'en reconstruire une autre avec des directives AddModule.


Sinon moi ça va, et vous ?