この記事は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フォルダにコピーしたら上手く動くようになったので、今回はとりあえずそれで良しとする。