http - 關於PHP設定content-length的問題。
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 12:58:51
0
1
1122

1.先說一下我這邊的使用場景。就是客戶端使用服務端的介面下載檔。服務端這邊是直接取得二進位然後輸出的。請問除了echo 二進制以外還有沒有更合理的返回方式。

2.用PHP header('Content-Length: '.strlen($Download));設定Content-Length,這個設定實際上無效的嗎?因為照理來說的話,本身http請求會根據輸出的大小來設定Content-Length。即使我設定改變了 最終請求的Content-Length還是根據實際的大小。

3.還有一個問題就是例如我請求一個 10M的檔案的二進位。用瀏覽器請求的話壓根沒有Content-Length這個頭回傳。用客戶端那邊請求能正常回傳Content-Length。 Content-Length的回傳請求的方式也有關係?

过去多啦不再A梦
过去多啦不再A梦

全部回覆(1)
漂亮男人

你的來源是二進位流?

1, 如果是文件,只是為了隱藏真實路徑,可以嘗試用以下方式:

readfile($filename)echo效率高

或使用 X-SendFile技術

如果的確是二進位流,也可以嘗試先快取成檔案了 然後 X-SendFile

2, header设置Content-Length是有效的,返回真实的大小即可。这个在一些下载软件比较重要,比如迅雷。
它会检测最终大小是否符合Content-Length

3, 瀏覽器會以Content-Length为参照,
但是当网络很糟糕的时候,超时、断流了,浏览器也会停止下载,最终得到的是一个不完整的文件,这个下载国外软件的时候很常见。
如果实际大小超过了Content-Length,瀏覽器也接受。

4, 所以即使沒有Content-Length返回,瀏覽器也可以下載,等到服務端斷流,瀏覽器就終止下載。

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