On a beau vanter la supériorité de tel ou tel OS, une stabilité légendaire ou une performance incomparable du logiciel X ou Y, il arrive toujours que certaines combinaisons fournissent des résultats surprenants. C'est le cas par exemple d'Apache (2) avec mod_php (4 ou 5), sur FreeBSD (6 dans mon cas).
Cette combinaison, et peut être d'autres, a le gros inconvénient d'être sensible à l'ordre de chargement des extensions de PHP. Pour ma part, c'est la seconde fois que je suis confronté à des plantages des démons httpd à cause du simple fait que les extensions PHP ne sont pas chargées dans l'ordre idéal. Sur FreeBSD, le chargement en question est orchestré par le fichier /usr/local/etc/php/extensions.ini
. Cela ressemble à ça :
extension=filter.so extension=hash.so extension=json.so extension=gettext.so extension=pcre.so
Si par malheur vous avez plus d'une poignée de ces extensions, vous risquez un jour de tomber sur un enchaînement problématique. Par chance, mon problème n'était pas dramatique : Apache faisant un segfault
uniquement au moment de quitter.
Voilà les traces dans /var/log/messages
des process fils httpd quittant sur un signal 11
au moment de se terminer :
kernel: pid 51113 (httpd), uid 80: exited on signal 11 kernel: pid 16830 (httpd), uid 80: exited on signal 11
Et voilà la trace du process parent httpd au moment d'un apachectl restart ou stop :
kernel: pid 57931 (httpd), uid 0: exited on signal 11 (core dumped)
Après une recherche intensive, je suis tombé sur un petit bout de script shell qui rend bien service : fixphpextorder.sh. Ce script écrit par J. Pingle permet de ré-ordonner les extensions PHP dans une configuration supposée non-conflictuelle. En deux mots comme en mille : ça marche !
Vous lancez le script (à partir d'un compte utilisateur ayant les droits d'écriture sur le fichier /usr/local/etc/php/extensions.ini
) et vous relancer votre Apache. Normalement, c'est la fin des plantages. Si ils persistent n'hésitez pas à le faire savoir à l'auteur du script, ce genre de choses ne peut s'améliorer qu'avec le retour des utilisateurs.