Bagaimana untuk melaksanakan penyambungan semula titik putus muat turun dalam PHP

藏色散人
Lepaskan: 2023-03-17 11:38:01
asal
1925 orang telah melayarinya

php实现下载断点续传的方法:1、创建一个php示例文件;2、定义一个download方法;3、通过“if (empty($file) or !is_file($file)) {...}”方法检查文件是否存在;4、通过“if (!empty($_SERVER['HTTP_RANGE'])) {...}”实现文件下载,并支持断点续传即可。

Bagaimana untuk melaksanakan penyambungan semula titik putus muat turun dalam 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(&#39;start&#39;, &#39;end&#39;), $range);
            if (empty($range[&#39;start&#39;])) {
                $range[&#39;start&#39;] = 0;
            }
            if (empty($range[&#39;end&#39;])) {
                $range[&#39;end&#39;] = $file_size;
            }
        }
        // 使用续传
        if ($range != null) {
            header(&#39;HTTP/1.1 206 Partial Content&#39;);
            header(&#39;Accept-Ranges:bytes&#39;);
            // 计算剩余长度
            header(sprintf(&#39;content-length:%u&#39;, $range[&#39;end&#39;] - $range[&#39;start&#39;]));
            header(sprintf(&#39;content-range:bytes %s-%s/%s&#39;, $range[&#39;start&#39;], $range[&#39;end&#39;], $file_size));
            // fp指针跳到断点位置
            fseek($fp, sprintf(&#39;%u&#39;, $range[&#39;start&#39;]));
        } else {
            header(&#39;HTTP/1.1 200 OK&#39;);
            header(&#39;Accept-Ranges:bytes&#39;);
            header(&#39;content-length:&#39; . $file_size);
        }
        while (!feof($fp)) {
            echo fread($fp, 4096);
            ob_flush();
        }
        fclose($fp);
    } else {
        die(&#39;File loading failed&#39;);
    }
}
Salin selepas log masuk

推荐学习:《PHP视频教程

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan penyambungan semula titik putus muat turun dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan