PHP中使用echo輸出大型二進位字串到HTTP回應時,伺服器傳回了一個格式錯誤的回應
P粉328911308
P粉328911308 2023-08-28 10:26:38
0
1
526
<p>我正在嘗試使用以下程式碼將一些大型二進位陣列輸出到HTTP回應:</p> <pre class="brush:php;toolbar:false;">$bin = NULL; $strLenToOutput = 8000; for ($i=0; $i < $strLenToOutput; $i ) { $bin .= pack("C", 1); } header('Content-Description: File Transfer'); 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>當要輸出的字串相對較短時,小於等於8000,上述程式碼運作正常。但是如果字串長度增加到8001,我會在Postman中收到以下錯誤:</p> <pre class="brush:php;toolbar:false;">Parse Error: The server returned a malformed response</pre> <p>我正在運行PHP7.4在Apache V2.4.46上,所有設定都是預設的。 </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>
P粉328911308
P粉328911308

全部回覆(1)
P粉966335669

問題在於Content-Length頭部的設定方式。原始程式碼設定了一個頭部

header("Content-Length: filesize=" . strlen($bin));

應該要像下面這樣設定:

header("Content-Length: " . strlen($bin));

在頭部中額外的文字"filesize="只會混亂客戶端對回應的解析。當Content-Length小於等於8000時,客戶端可能有辦法恢復,但無法處理Content-Length大於等於8001的情況

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板