PHPを起動するとhttpdがSegmentation faultになる場合の対処法

Apache 2.0.52でPHPが動いてないウェブサーバがあった。
GETするといきなりEOFでコンテンツが何もこない。

httpdのerror_logにセグメンテーション違反が出てた。

[Mon Feb 16 13:30:24 2009] [notice] child pid 7897 exit signal Segmentation fault (11)

gdbhttpdを起動してみるとバックトレースはこんな感じ。
やり方はここを参考にした。http://dozo.rgr.jp/log/eid454.html

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1209084224 (LWP 3094)]
0x00000000 in ?? ()
(gdb)
(gdb) bt
#0  0x00000000 in ?? ()
#1  0x01250aa7 in php_hash_environment ()
    at /usr/local/src/php-5.1.6/main/php_variables.c:656
#2  0x01245e76 in php_request_startup ()
    at /usr/local/src/php-5.1.6/main/main.c:1118
#3  0x012f4d46 in php_handler (r=0x9eadde0)
    at /usr/local/src/php-5.1.6/sapi/apache2handler/sapi_apache2.c:542
#4  0x00dea9c7 in ap_run_handler () from /usr/sbin/httpd
#5  0x00deae33 in ap_invoke_handler () from /usr/sbin/httpd
#6  0x00de78b5 in ap_process_request () from /usr/sbin/httpd
#7  0x00de263f in _start () from /usr/sbin/httpd
#8  0x09eadde0 in ?? ()
#9  0x00000004 in ?? ()
#10 0x09eadde0 in ?? ()
#11 0x00927d89 in modperl_process_connection_handler ()
   from /etc/httpd/modules/mod_perl.so
#12 0x00df5359 in ap_run_process_connection () from /usr/sbin/httpd
#13 0x00df56c4 in ap_process_connection () from /usr/sbin/httpd
#14 0x00de8909 in ap_graceful_stop_signalled () from /usr/sbin/httpd
#15 0x00de8b00 in ap_graceful_stop_signalled () from /usr/sbin/httpd
#16 0x00de8c1f in ap_graceful_stop_signalled () from /usr/sbin/httpd
#17 0x00de94e4 in ap_mpm_run () from /usr/sbin/httpd
#18 0x00df035a in main () from /usr/sbin/httpd

原因は単純。Apacheの設定でPHP5とPHP4のモジュールをどっちもロードしてた。
PHP4のほうをコメントアウトしてhttpd再起動で終わり。

conf/httpd.confで

LoadModule php5_module modules/libphp5.so

conf.d/php.confで

#LoadModule php4_module modules/libphp4.so

PHP5のモジュール入れたら動作確認は必ずやりましょうね。