PHP中使用echo輸出大型二進位字串到HTTP回應時,伺服器傳回了一個格式錯誤的回應
P粉328911308
P粉328911308 2023-08-28 10:26:38
0
1
454

我正在嘗試使用以下程式碼將一些大型二進位陣列輸出到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));

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的情況

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!