Bei der Verwendung von echo zur Ausgabe einer großen Binärzeichenfolge in einer HTTP-Antwort in PHP gab der Server eine fehlerhafte Antwort zurück.
<p>Ich versuche, mit dem folgenden Code einige große Binärarrays in eine HTTP-Antwort auszugeben: </p>
<pre class="brush:php;toolbar:false;">$bin = NULL;
$strLenToOutput = 8000;
for ($i=0; $i < $strLenToOutput; $i++) {
$bin .= pack("C", 1);
}
header('Content-Description: Dateiübertragung');
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=test.bin");
header("Content-Length: filesize=" . strlen($bin));
header("Cache-Control: no-cache");
echo $bin;</pre>
<p>Wenn die auszugebende Zeichenfolge relativ kurz ist, kleiner oder gleich 8000, funktioniert der obige Code einwandfrei. Aber wenn die Stringlänge auf 8001 erhöht wird, erhalte ich in Postman die folgende Fehlermeldung: </p>
<pre class="brush:php;toolbar:false;">Analysefehler: Der Server hat eine fehlerhafte Antwort zurückgegeben</pre>
<p>Ich verwende PHP7.4 auf Apache V2.4.46, alle Einstellungen sind Standard. </p>
<p>Was mache ich hier falsch? Müssen der PHP-Code oder einige Einstellungen auf Apache2 geändert werden? </p>
<p>Bitte geben Sie Hinweise, vielen Dank im Voraus. </p>
<p>Update: Wenn ich die folgende Zeile entferne, die die Dateilänge festlegt, funktioniert der PHP-Code einwandfrei. Ich schätze, das Problem ist, dass ich PHP diesen Teil selbst überlassen sollte. </p>
<pre class="brush:php;toolbar:false;">//header("Content-Length: filesize=" . strlen($bin));</pre></p>