Win32用Apache2のスタックサイズ
PHPで、PukiWikiの用にでpreg_replace_callback関数を使って、大きなサイズのテキストに対して、複雑な置き換えをしようとするときに、Linux環境下のApache2+PHP4ではうまく実行できても、Win32環境下で実行するとApacheごとこけてしまうというトラブルにここ数ヶ月悩まされていた。
Win32環境でも、PHP4をCGIとして稼働させてやればうまくいくし、Apache1.3環境下でPHPのsapiモジュールを動かしても問題ないので、てっきりPHP4のApache2用sapiモジュールに問題があるのだと思っていた。
ふとしたきっかけで、php.netのバグデータベースにpreg_replace_callbackが落ちる原因は、スタックがオーバーフローしているからだという事を知った。
PHP4のApache2用sapiモジュールはDLLだから、結局はApache2のApache.exeをビルドする時のスタックサイズ指定が小さすぎるという事になる。
というわけで、Apache.exeをスタックサイズを大きめに再指定してビルドしてやったら、確かに今までこけていたスクリプトがうまく実行されるようになった。
参考ページ
- PHP Bugs: #25754: preg_replace() and preg_replace_callback() crash with long matches
- Compiling Apache for Microsoft Windows
Comments Off
コメント
この投稿には、まだコメントが付いていません
コメントの投稿
ごめんなさい、現在コメントを付けることは出来ません