首頁 > 後端開發 > php教程 > 如何在 PHP 檔案隧道中實現斷點續傳?

如何在 PHP 檔案隧道中實現斷點續傳?

Susan Sarandon
發布: 2024-12-08 19:52:11
原創
812 人瀏覽過

How Can I Implement Resumable Downloads in PHP File Tunneling?

使用PHP 檔案隧道進行斷點續傳

使用PHP 串流檔案下載時,可能需要為使用者啟用斷點續傳下載。但是,預設的 PHP 腳本設定通常會阻止恢復下載。

要使用PHP 支援可恢復下載,請按照以下步驟操作:

  1. 發送Accept-Ranges 標頭:
    在所有回應中發送Accept-Ranges: bytes標頭,表示伺服器支援斷點續傳
  2. 處理範圍請求:
    檢查傳入請求的範圍:bytes=x-y 標頭,其中x 是偏移量,y是所請求範圍的結束位元組。
  3. 尋找文件並發送範圍:
    開啟檔案並尋找指定的位置 抵銷。然後,使用 fread() 傳送請求的位元組範圍。
  4. 設定部分內容標頭:
    對於範圍要求,設定HTTP/1.0 206 部分內容標頭並指定內容範圍使用Content-Range: bytes x-y/filesize.

實施這些步驟應該啟用PHP 檔案隧道設定中的可恢復下載。以下是示範流程的 PHP 程式碼範例:

$filesize = filesize($file);

$offset = 0;
$length = $filesize;

if (isset($_SERVER['HTTP_RANGE'])) {
    preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

    $offset = intval($matches[1]);
    $length = intval($matches[2]) - $offset;
}

$file = fopen($file, 'r');
fseek($file, $offset);
$data = fread($file, $length);
fclose($file);

if ($partialContent) {
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
}

header('Content-Type: ' . $ctype);
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Accept-Ranges: bytes');

print($data);
登入後複製

以上是如何在 PHP 檔案隧道中實現斷點續傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板