PHP下载文件函数封装及下载大文件解决方案

PHP下载文件函数封装及下载大文件解决方案

大家好,我是Yangrl.
今天分享的是我在学习PHP文件操作部分中实现一个下载文件函数封装时遇到的问题(小文件没问题,大文件总是下载失败)和解决的过程。
进入正题:
先贴出OJBK代码段

function down_file($filename,$allowDownExt=array ('jpg','jpeg','gif', 'rar','zip','png','txt','html')) { 
        //检测文件是否存在,并且可读
        if(!is_file($filename) && is_readable($filename)) {
            return false;
        }

        //获取文件的扩展名
        $fileext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));

        //检测文件类型是否允许下载
        if(!in_array($fileext,$allowDownExt)) {
            return false;
        }

        //设置脚本的最大执行时间,设置为0则无时间限制
        set_time_limit(0);

        //通过header()发送头信息
        //因为不知道文件是什么类型的,告诉浏览器输出的是字节流
        header('content-type:application/octet-stream');

        //告诉浏览器返回的文件大小类型是字节
        header('Accept-Ranges:bytes');

        //获得文件大小
        $filesize=filesize($filename);

        //告诉浏览器返回的文件大小
        header('Accept-Length:'.$filesize);

        //告诉浏览器文件作为附件处理并且设定最终下载完成的文件名称
        header('content-disposition:attachment;filename=yangrl'.basename($filename));

        //针对大文件,规定每次读取文件的字节数为4096字节,直接输出数据
        $read_buffer=4096;
        $handle=fopen($filename, 'rb');
        //总的缓冲的字节数
        $sum_buffer=0;

        //只要没到文件尾,就一直读取
        while(!feof($handle) && $sum_buffer<$filesize) {           
            echo fread($handle,$read_buffer);
            $sum_buffer+=$read_buffer;
        }

        //关闭句柄
        fclose($handle);
        exit;
    }

**2.rar为一个18.8MB大小的压缩文件,2_1.rar为一个1.70 GB大小的压缩文件(之前还有个1.rar,是一个几百KB的压缩文件,就不展示了,和2.rar大小一个级别的都能成功下载)

运行后测试,首先下载2.rar,下载成功保持在了浏览器下载目录里
《PHP下载文件函数封装及下载大文件解决方案》
《PHP下载文件函数封装及下载大文件解决方案》

《PHP下载文件函数封装及下载大文件解决方案》

然后继续测试下载2_1.rar,问题出现:

《PHP下载文件函数封装及下载大文件解决方案》

《PHP下载文件函数封装及下载大文件解决方案》

我连续下载了5次,但没有一次是成功下载,或多或少都没下载完整,那啷个办耶?

《PHP下载文件函数封装及下载大文件解决方案》

好吧,一顿百度过后,各路大神都有自己的一套,可一一尝试对我的这段代码都没用啊,最后谷歌到了一行代码 “set_time_limit(0);”:设置脚本最大执行时间,设置为0则无限制,然后。。“山猫山猫,我是海鸥,连下两次成功,over!”
《PHP下载文件函数封装及下载大文件解决方案》
《PHP下载文件函数封装及下载大文件解决方案》

问题就解决了!感兴趣的小伙伴可以自己深入探究我就不啰嗦啦哈哈哈。也希望大家能指出我的不足,分享自己的解决方法。

“如果真诚地试着帮助他人,必然也同时帮助了自己。”——鲁迅
《PHP下载文件函数封装及下载大文件解决方案》

    原文作者:yAngrUiLin啊
    原文地址: https://blog.csdn.net/YAruli/article/details/78696408
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞