18910140161

php readfile下载文件不完整

顺晟科技

2022-09-15 12:22:27

91

php readfile下载文件不完整,没报错,大文件时候有些文件夹丢失,文件少的时候正常

        self :: addFileToZip('./AnswerZip/', $zip); //调用方法,对要打包的目录进行while()操作进行添加到zpi文件

        $zip->close();  //关闭压缩包
        //下面是输出下载;
        header('Content-disposition: attachment; filename=' . basename($filename));
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: binary");
        header('Content-Length: ' . filesize($filename));
//        ob_clean();
//        flush();
        readfile($filename);

比如生成的zip是500M,但是使用readfile下载下来只有200M,如果使用绝对路径放浏览器下载,就是正常的?这是怎么回事?

试试把output_buffering关掉(设为0)

或者开头加一行

ini_set('output_buffering', 0);

原答案删除. 你看一下不完整的200M的文件最末尾, 看看有报错之类的东西么.

如果是使用框架,建议使用框架提供的文件下载功能
比如laravel有提供response()->download();来下载文件

PHP处理文件下载readfile是写入PHP 缓冲区的,readfile会把文件内容直接读到缓冲区,如果下一个大文件,那么缓冲区就会爆。。
大文件读写都是游标读追加写。又不吃内存。。。
参考下fopen fread

很多网上的方法都试过了,都不行,但是我本地使用nginx服务器是可以的,正式服是iis,所以解决方案我选择了路径下载,放弃了readfile的方式,这样可以解决问题,大文件还是不要使用readfile,各种奇奇怪怪的问题

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航