我正在嘗試使用以下程式碼將一些大型二進位陣列輸出到HTTP回應:
$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;
當要輸出的字串相對較短時,小於等於8000,上述程式碼運作正常。但是如果字串長度增加到8001,我會在Postman中收到以下錯誤:
Parse Error: The server returned a malformed response
我正在運行PHP7.4在Apache V2.4.46上,所有設定都是預設的。
我在這裡做錯了什麼?是PHP程式碼還是Apache2上的一些設定需要更改?
請給予指導,提前感謝。
更新:如果我刪除設定檔長度的以下行,PHP程式碼將正常運作。我猜問題是我應該讓PHP自己處理這部分。
//header("Content-Length: filesize=" . strlen($bin));
問題在於Content-Length頭部的設定方式。原始程式碼設定了一個頭部
應該要像下面這樣設定:
在頭部中額外的文字"filesize="只會混亂客戶端對回應的解析。當Content-Length小於等於8000時,客戶端可能有辦法恢復,但無法處理Content-Length大於等於8001的情況