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が突然消えてしまったのだ。
さて、ここからが大変だった。結論から言えば、一旦httpdもPHPも全部アンインストールして、もう一度入れなおしたのだ。もともとセットアップした人が全部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が立ち上がるようになった。
一晩中かかってやっと復旧。実に大変だった。。。