libphp5.soが消え、PHPが動かなくなった

ある時ふとサイトにアクセスしたら、繋がらない。
とりあえずpingしてみる。

サーバー本体からはレス有り。SSHでログインしてhttpdのstatusを調べると動いてない。

service httpd start

すると、child processが残っててどうこう、というメッセージ。そこで一旦

service httpd stop

すると、[FAILED]のメッセージ。もう一度

service httpd start

しようとすると、httpd.confにエラーがある旨のメッセージが表示される。なんでもLoadModuleのlibphp5.soに関する記述がmisspelledではないかと。

そんなところ長いこといじっていないのにおかしい。

該当部分の記述を確認してみるが、おかしなところはない。念のため

locate libphp5.so

をしてみると、やはりちゃんとモジュールのディレクトリの中にある。Apacheを何度か再起動したり、httpd.confに変な全角スペースでも混ざってないかと探るもおかしなところはない様子。
この部分のLoadModuleをコメントアウトするとちゃんと起動するものの、PHPは使えなくなる。

さて、実際にlocateで見つけたlibphp5.soがあるはずのディレクトリに移動して調べてみる。すると、libphp5.soのあるはずの場所に無い!
もう一度locate libphp5.soするとその場所にあるはず、と出る。でもls -aしても出てこない。

locate -u でlocateのキャッシュを更新する。すると今度はlocate libphp5.soでlibphp5.soは発見できなくなる。

これは困った。理由は不明だがlibphp5.soが突然消えてしまったのだ。

さて、ここからが大変だった。結論から言えば、一旦httpdPHPも全部アンインストールして、もう一度入れなおしたのだ。もともとセットアップした人が全部yumで入れていたみたいだった。

最初PHPとかをちまちまとアンインストールして、PHPのソースを落としてきてはいろいろな./configureのオプションを試してみる。そうするとconfigure, make, make installはできるものの、libphp5.soを作るのに必要なapxsも無いことに気づく。

いろいろ調べてみると、yumの場合apxsはhttpd-develの中にあるみたいだったので、

yum -y install httpd-devel

とやると、aprのバージョンが合わないとかで弾かれる。それでは、と、

yum -y install apr

としても何もインストールされない。

その後色々なyumを試したが全部効果なし。
そんな感じで様子を見て、インストール、アップデート、アンインストールとやりながら何時間も費やして、結局埒が明かず、全部やり直しするはめになった。

yum remove httpd

httpd系を全部落としてから改めて、

yum -y install httpd httpd-devel

とやるとエラーなくインストールできた。

きちんとapxsもインストールされている。findで見つけられた。(さっきはなかった)
今度はPHPの./configureで

./configure --prefix=/usr/local/php --enable-mbstring --with-apxs2=/usr/sbin/apxs --with-config-file-path=/usr/local/php/lib/  --enable-zend-multibyte --enable-mbregex --with-mime-magic --enable-exif --with-gd --with-zlib --with-jpeg-dir --with-mysql=/usr/local/mysql/ 
make 
make install

でうまくいく。

findでlibphp5.soを探すと、無事に生成されていることがわかる。

その後httpd.confに

LoadModule php5_module modules/libphp5.so

を確認。

AddType application/x-httpd-php .php

のラインも追加する。

これでアパッチを再起動する。問題なく起動できる。

ところが、アクセスすると、拡張子が.htmlで終わるものに関しては普通に動いているが、.phpファイルが無視されてしまう。ブラウザによっては認識できずダウンロードしようとする。ためしにダウンロードしてみると、PHPのソースファイルそのまんまの状態になっている。

ためしにを書いてみるも、まったく何も起こらない。

アパッチのerror_logを見ると、

 [notice] child pid 8815 exit signal Segmentation fault (11)

という謎のエラーが。

いろいろ小細工をしてみたがなかなか原因がわからない。しかし戯れに、

php -v

としてみると、バージョンが4で認識されている。これをインストールした記憶はないので、

yum remove php php-devel

PHP関連のyumでインストールされたものw外して、もう一度PHPをconfigure, make, make install。

すると今度こそエラーが出ずにきちんとPHPが立ち上がるようになった。
一晩中かかってやっと復旧。実に大変だった。。。