首页 > 后端开发 > php教程 > PHP如何实现断点续传文件下载?

PHP如何实现断点续传文件下载?

Linda Hamilton
发布: 2024-12-07 11:10:17
原创
930 人浏览过

How Can PHP Implement Resumable File Downloads?

使用基于 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);
登录后复制

附加说明

  • 代码假设仅请求一个范围。
  • 为简洁起见,已省略错误处理。
  • 有关部分内容和 fread 函数的更多详细信息,请参阅提供的文档。

以上是PHP如何实现断点续传文件下载?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板