[PHP] PHP5 + MySQL + Apache2.2 で Apache が落ちる件

この記事は3年以上前に書かれた記事です。情報が古い可能性があります。

Windows7 に以下の構成でインストール。

  • PHP 5.2.6
  • MySQL 5.1.51
  • Apache 2.2

これで MDB2 等を使って MySQL にアクセスするスクリプトを動かすと、PHP が Apache ごと落ちるという悲しい現象。しかも必ず落ちるのではなく、落ちないこともある。(一番困るパターン!)

Apache の error.log を見ると

[Sat Oct 23 22:59:35 2010] [notice] Parent: child process exited with status 1 — Restarting.

などという素っ気ないメッセージ。せめて、何で死んだのか遺言なり断末魔なりを残してくれ。PHPやMySQLを最新モジュールにしてみたり、ApacheやPHPで余計なモジュールをロードしないようにしてみたりと、いろいろやったんだけど、全て空振り。

で、解決策、というか、結果的にこうしたらなおった、というのが PHP をインストールしたフォルダの下にある libmysql.dll を C:\Windows フォルダ直下に置いたらうまく動作するようになった。

これは憶測なのだけど、libmysql.dll というDLLは、実は MySQL の bin フォルダにもある。(サイズとか微妙に違うので、PHP側のとは別モノだと思われる)そして、PHP側、MySQL側両者にはしっかりパスが通っている。どっちが動くかがすごく曖昧な状態(先に書いてある方が動く?)。

で、PHP のやつを Windows に置いたら上手く動いたということは、MySQL側でなく、PHP側のDLLが動作するのが正しいということっぽい。実際、PHP の ext フォルダにある php_mysql.dllとかは、こっちと連携してるんじゃないかな?それが、何かの間違いでMySQL側のが動いたら落ちるとか、そういうことじゃないかな??

この理屈が正しければ、MySQL側の libmysql.dll を殺すことでも解決するんじゃないかと思われるけど、Windowsフォルダにコピーしたら上手く動くようになったので、今回はとりあえずそれで良しとする。

タイトルとURLをコピーしました