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