首頁 > 後端開發 > php教程 > PHP如何實作斷點續傳檔案下載?

PHP如何實作斷點續傳檔案下載?

Linda Hamilton
發布: 2024-12-07 11:10:17
原創
937 人瀏覽過

How Can PHP Implement Resumable File Downloads?

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

在這種使用PHP 作為檔案下載代理的場景中,使用者面臨著挑戰恢復中斷的下載。本文旨在解決這個問題並探索可能的解決方案。

在PHP 中實現可斷點下載

要啟用可斷點下載,您必須先傳達伺服器對部分內容的支援透過「Accept-Ranges: bytes 」標頭。隨後,當請求包含「Range: bytes=x-y」標頭(其中 x 和 y 代表數值)時,您應該提取請求的範圍並相應地操作檔案傳輸。

以下 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);
登入後複製

附加說明

  • 程式碼假設只要求一個範圍。
  • 為簡潔起見,已省略錯誤處理。
  • 有關部分內容和 fread 函數的更多詳細信息,請參閱提供的文檔。

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

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