首頁 > 後端開發 > php教程 > 如何在 PHP 中實作斷點續傳,同時保護檔案路徑?

如何在 PHP 中實作斷點續傳,同時保護檔案路徑?

Linda Hamilton
發布: 2024-12-26 11:50:10
原創
858 人瀏覽過

How Can I Implement Resumable Downloads in PHP While Protecting File Paths?

PHP 腳本中的可恢復下載

透過PHP 腳本隧道檔案下載以保護檔案路徑時,很明顯預設方法不支援可斷點下載。要解決此問題,請考慮以下解決方案:

支援斷點續傳的關鍵是實現部分內容處理。若要啟動此操作,請在所有回應中傳送 Accept-Ranges: bytes 標頭,表示支援部分內容。

收到帶有 Range: bytes=x-y 標頭的請求後,解析客戶端指定的範圍。開啟文件,尋找位元組 x,然後傳送請求的 y - x 位元組。此外,將回應狀態設定為 HTTP/1.0 206 Partial Content。

這是一個大致遵循此方法的基本PHP 程式碼片段:

$filesize = filesize($file);

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

    $offset = intval($matches[1]);
    $length = intval($matches[2]) - $offset;
} else {
    $partialContent = false;
}

$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中文網其他相關文章!

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