《PHP實戰:PHP實現文件下載斷點續傳詳解》要點:
本文介紹了PHP實戰:PHP實現文件下載斷點續傳詳解,希望對您有用。如果有疑問,可以聯系我們。
PHP教程如果我們的網站提供文件下載的服務,那么通常我們都希望下載可以斷點續傳(Resumable Download),也就是說用戶可以暫停下載,并在未來的某個時間從暫停處繼續下載,而不必重新下載整個文件.
PHP教程通常情況下,Web服務器(如Apache)會默認開啟對斷點續傳的支持.因此,如果直接通過Web服務器來提供文件的下載,可以不必做特別的配置,即可享受到斷點續傳的好處.由于這些文件直接通過Web服務器來提供下載,后端腳本無法對這個下載過程進行控制.這對于僅提供公開、靜態文件的網站來說不是問題,但對于必要提供私有、動態文件的網站來說,直接通過Web服務器來提供下載就無法滿足需求了.這時,就必要在編寫后臺腳本程序時,加入對斷點續傳的支持.
PHP教程本文將以PHP為例,簡要介紹實現文件下載斷點續傳的辦法.
PHP教程原理
PHP教程斷點續傳的原理還是比擬直觀的.
PHP教程HTTP協議規定了如何傳輸某個資源的一部分,而不是全部.比如,有一個文件的大小是1000字節,瀏覽器可以只哀求該文件的前300個字節,或者只哀求第500到第1000個字節.通過這種方式,就可以不必在一次哀求中傳輸某個資源的全部內容,而是發起多次哀求,每次僅哀求其中的一部分內容.等所有這些哀求都返回之后,再把得到的內容一塊一塊的拼接起來得到完整的資源.
PHP教程實現斷點續傳就是要利用HTTP協議的上述特性.當用戶暫停下載的時候,瀏覽器會記錄已經下載到什么位置,當用戶在未來某一時間恢復下載時,就可以從上次暫停的位置繼續下載,而不必從頭開始.
PHP教程實現
PHP教程由于部分傳輸不是強制的,服務器可以支持也可以不支持,所以,我們需要在程序中告訴瀏覽器,它哀求的資源是否支持部分傳輸.這可以通過設置HTTP的 Accept-Ranges 響應頭信息來實現.PHP代碼如下:
PHP教程當接受到一個哀求時,我們需要從瀏覽器的哀求中提取瀏覽器具體是在哀求資源的哪一個部分.這個信息是通過 Range 哀求頭來傳遞的.在PHP中,它被存儲在$_SERVER['HTTP_RANGE']中.我們需要檢查這個變量是否定義了,如果定義了,則使用該值,否則,就將range設為整個資源.
PHP教程1.開始位置非負
2.結束位置需要大于開始位置
3.開始位置需要小于文件長度減一 (因為這里的位置索引是從0開始的)
4.若結束位置大于文件長度減一,則需要把它的值設置為文件長度減一
PHP教程如果Range的取值不合法,則必要終止程序并告知瀏覽器:
PHP教程接下來要做的就是把文件的對應部分的內容發送給瀏覽器.不過要注意的是,這里涉及到需要發送多個HTTP響應頭信息,具體如下:
PHP教程/* 輸出文件的指定部分 */
PHP教程總結
PHP教程文件下載的斷點續傳實際上是利用了HTTP協議中對傳輸部分文件的支持.而HTTP協議的這一特性不僅可以用于實現斷點續傳,客戶端程序也可以利用它來實現多線程下載.
PHP教程在實現斷點續傳的過程中,必要注意正確設置各種HTTP頭信息.錯誤的頭信息將導致用戶下載到的文件損壞,無法使用.
歡迎參與《PHP實戰:PHP實現文件下載斷點續傳詳解》討論,分享您的想法,維易PHP學院為您提供專業教程。