Symfony 1.4.16をWindowsのPHP 5.3.9で実行したときに、特定の条件で強制終了する現象に悩まされていました。
主にSymfonyタスクでdoctrine:data-dumpなどを実行するときに落ちていました。
色々調べた結果、Symfonyに問題があるわけではなく、/lib/vendor/symfony/lib/config/sfDefineEnvironmentConfigHandler.class.phpがきっちり4096バイトだったということが原因でした。
つまり、PHP5.3.9では、4096バイトのファイルをrequireもしくはincludeするとc0000005(Access Violation)で強制終了します。CLIに限らず、Apache経由でも同じです。
試しに4096バイトの一切コードが書かれていないテキストファイルを作ってrequireしてみると、再現しました。
強制終了時のウィンドウと、内容は以下のとおり。
ちなみにモジュール名はnts(Non Thread Safe)版ならphp5.dll、ts(Thread Safe)版ならphp5ts.dllです。
どちらも確認しましたが、どちらも同じ現象です。モジュールは入っていても入っていなくても同じです。
問題の署名:
問題イベント名: APPCRASH
アプリケーション名: php.exe
アプリケーションのバージョン: 5.3.9.0
アプリケーションのタイムスタンプ: 4f0c5cd0
障害モジュールの名前: php5.dll
障害モジュールのバージョン: 5.3.9.0
障害モジュールのタイムスタンプ: 4f0c5dfb
例外コード: c0000005
例外オフセット: 00090f5b
OS バージョン: 6.1.7601.2.1.0.256.48
ロケール ID: 1041
追加情報 1: 0a9e
追加情報 2: 0a9e372d3b4ad19135b953a78882e789
追加情報 3: 0a9e
追加情報 4: 0a9e372d3b4ad19135b953a78882e789
多分現象はこのバグ報告と同じだと思います。
PHP :: Bug #60758 :: require() crashes Apache
5.4.0RC5でも解決してないみたいですね。報告とほぼ同じですが、これで再現できます。
<?php file_put_contents('test.txt', str_pad('', 4096)); include('./test.txt');
とりあえず対処法としては改行1文字でも増やしておけばいいってことですか…