首頁 >後端開發 >php教程 >如何在 PHP 檔案傳輸腳本中啟用可斷點下載?

如何在 PHP 檔案傳輸腳本中啟用可斷點下載?

Linda Hamilton
Linda Hamilton原創
2024-12-07 15:45:18725瀏覽

How Can I Enable Resumable Downloads in My PHP File Transfer Script?

使用PHP 檔案傳輸腳本啟用斷點續傳

簡介

出於安全目的使用PHP 腳本傳輸檔案時,可下載檔案的絕對路徑往往需要隱藏。然而,傳統的 PHP 檔案傳輸腳本可能不支援斷點續傳,對終端用戶造成連線中斷的不便。

解決方案:支援斷點續傳

要啟用斷點續傳,可以執行以下步驟:採取:

  1. 發送接受範圍:位元組header: 此標頭通知客戶端支援部分內容。
  2. 處理部分內容請求: 當收到帶有Range: bytes=x-y 標頭的請求時,解析範圍,查找文件中所需的偏移量,並發送請求的位元組範圍。
  3. 設定部分內容 HTTP 狀態碼:回應 HTTP/1.0 206 Partial Content 表示部分傳輸成功。

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 ($offset > 0) {
    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);

此腳本首先檢查是否發出了部分內容請求。如果是,它會解析 Range 標頭中的範圍,尋找文件中適當的偏移量,並發送請求的位元組範圍。該腳本還將 Accept-Ranges 標頭設定為字節,並在必要時為部分內容傳送適當的 HTTP 狀態碼。

透過實施這些措施,可以使用 PHP 檔案傳輸腳本支援可恢復下載,從而提供強大的解決方案用於在中斷後可以恢復的檔案傳輸。

以上是如何在 PHP 檔案傳輸腳本中啟用可斷點下載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn