使用基於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);
附加說明
以上是PHP如何實作斷點續傳檔案下載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!