环球动态:php怎么实现下载断点续传

时间:2022-11-06 09:58:21       来源:PHP中文网


(相关资料图)

本教程操作环境: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视频教程》

以上就是php怎么实现下载断点续传的详细内容,更多请关注php中文网其它相关文章!

关键词: 断点续传 文件下载 文件大小