PHP でエコーを使用して大きなバイナリ文字列を HTTP 応答に出力すると、サーバーは不正な形式の応答を返しました。
<p>次のコードを使用して、大きなバイナリ配列を HTTP 応答に出力しようとしています。</p>
<pre class="brush:php;toolbar:false;">$bin = NULL;
$strLenToOutput = 8000;
for ($i=0; $i <$strLenToOutput; $i ) {
$bin .= パック("C", 1);
}
header('コンテンツの説明: ファイル転送');
header("Content-Type: application/octet-stream");
header("Content-Disposition:attachment; filename=test.bin");
header("Content-Length: filesize=" .strlen($bin));
header("キャッシュ制御: キャッシュなし");
echo $bin;</pre>
<p>出力される文字列が 8000 以下の比較的短い場合、上記のコードは正常に動作します。しかし、文字列の長さが 8001 まで増加すると、Postman で次のエラーが発生します。 </p>
<pre class="brush:php;toolbar:false;">解析エラー: サーバーが不正な形式の応答を返しました</pre>
<p>Apache V2.4.46 で PHP7.4 を実行しています。設定はすべてデフォルトです。 </p>
<p>ここで私の何が間違っているのでしょうか?変更する必要があるのは、PHP コードまたは Apache2 の一部の設定ですか? </p>
<p>ご指導をお願いいたします。よろしくお願いいたします。 </p>
<p>更新: ファイルの長さを設定する次の行を削除すると、PHP コードは正常に動作します。問題は、この部分自体を PHP に処理させる必要があることだと思います。 </p>
<pre class="brush:php;toolbar:false;">//header("Content-Length: filesize=" . strlen($bin));</pre></p>