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