PHP에서 echo를 사용하여 큰 바이너리 문자열을 HTTP 응답으로 출력할 때 서버가 잘못된 응답을 반환했습니다.
<p>다음 코드를 사용하여 일부 대규모 바이너리 배열을 HTTP 응답으로 출력하려고 합니다. </p>
<pre class="brush:php;toolbar:false;">$bin = NULL;
$strLenToOutput = 8000;
for ($i=0; $i < $strLenToOutput; $i++) {
$bin .= pack("C", 1);
}
header('콘텐츠 설명: 파일 전송');
header("콘텐츠 유형: 애플리케이션/옥텟 스트림");
header("콘텐츠 처리: 첨부 파일; 파일 이름=test.bin");
header("콘텐츠 길이: 파일 크기=" . strlen($bin));
header("캐시 제어: no-cache");
에코 $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>