php實現下載斷點續傳的方法:1、建立一個php範例檔案;2、定義一個download方法;3、通過「if (empty($file) or !is_file($file)) {...}」方法檢查檔案是否存在;4、通過「if (!empty($_SERVER['HTTP_RANGE'])) {...}」實現檔案下載,並支援斷點續傳即可。
php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:
本教學操作環境:windows7系統、PHP8.1版、Dell G3電腦。
php怎麼實現下載斷點續傳?
PHP實現檔案下載,支援斷點續傳
我一般廢話比較少,直接甩程式碼,不懂扣我,再不懂就只能扣腳丫了,OK?
PHP實現檔案下載介面,支援斷點續傳,下載器可以檢視檔案大小。檔案分片傳輸,記憶體消耗低。注意:使用時建議增加安全路徑限制及可下載檔案型別限制
/**
* 檔案下載
* @param string $file 檔案絕對路徑
*/
function download($file)
{
str_replace(['/','\\'], DIRECTORY_SEPARATOR, $file);
//檢查檔案是否存在
if (empty($file) or !is_file($file)) {
die('檔案不存在');
}
$fileName = basename($file);
//以唯讀和二進位制模式開啟檔案
$fp = @fopen($file, 'rb');
if ($fp) {
// 獲取檔案大小
$file_size = filesize($file);
//告訴瀏覽器這是一個檔案流格式的檔案
header('content-type:application/octet-stream');
header('Content-Disposition: attachment; filename=' . $fileName);
// 斷點續傳
$range = null;
if (!empty($_SERVER['HTTP_RANGE'])) {
$range = $_SERVER['HTTP_RANGE'];
$range = preg_replace('/[\s|,].*/', '', $range);
$range = explode('-', substr($range, 6));
if (count($range) < 2) {
$range[1] = $file_size;
}
$range = array_combine(array('start', 'end'), $range);
if (empty($range['start'])) {
$range['start'] = 0;
}
if (empty($range['end'])) {
$range['end'] = $file_size;
}
}
// 使用續傳
if ($range != null) {
header('HTTP/1.1 206 Partial Content');
header('Accept-Ranges:bytes');
// 計算剩餘長度
header(sprintf('content-length:%u', $range['end'] - $range['start']));
header(sprintf('content-range:bytes %s-%s/%s', $range['start'], $range['end'], $file_size));
// fp指標跳到斷點位置
fseek($fp, sprintf('%u', $range['start']));
} else {
header('HTTP/1.1 200 OK');
header('Accept-Ranges:bytes');
header('content-length:' . $file_size);
}
while (!feof($fp)) {
echo fread($fp, 4096);
ob_flush();
}
fclose($fp);
} else {
die('File loading failed');
}
}
登入後複製
推薦學習:《》
以上就是php怎麼實現下載斷點續傳的詳細內容,更多請關注TW511.COM其它相關文章!