開発中のアプリケーションが壊れていることに気付きました。この問題に絞り込むことができました (テスト ケースを設定しました)。
ini_set("display_errors", "1");
error_reporting(E_ALL);
error_log("[test] Memory limit: " . ini_get('memory_limit'));
error_log("[test] Max Execution Time: " . ini_get('max_execution_time'));
$testArray = array("abcdefghijklmnotuv..... 786998 characters later...ijklmEND");
$json = json_encode($testArray);
var_dump($json);
// echo($json);
error_log("[test] Memory: ".memory_get_usage()."B");
変数 $json を var_dump すると、正しい出力が得られます。
string(786998) "["abcdefghijklm....ijklmEND"]"
変数 $json をエコーすると、画面に何かが表示されるのを非常に簡単に確認できますが、その後消えます。最終応答は NULL のようです。
上記を配列の代わりに文字列で繰り返すと、同じことが起こります。
上記を文字列で繰り返し、json_encode ステップを省略した場合、すべてが期待どおりに動作し、var_dump と echo の結果は正しいです。
プロセス全体で、エラー ログにエラーが出力されません。メモリ制限と最大実行時間も問題ありません。
[test] Memory limit: 256M
[test] Max Execution Time: 30
[test] Memory: 2134296B
何か案は?
私のアプリケーションに関するちょっとした情報:
一言で言えば、2つのサーバーがあります。サーバー A は HTTP 要求をサーバー B に送信し、サーバー B は要求を処理して応答をサーバー A に返します。応答は常に JSON でエンコードされた配列です。応答の配列の値の 1 つが長すぎる場合、サーバー A は NULL 応答を受け取ります。