php readfile下载文件不完整

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,如果使用绝对路径放浏览器下载,就是正常的?这是怎么回事?

阅读 3.7k
5 个回答

试试把output_buffering关掉(设为0)

或者开头加一行

ini_set('output_buffering', 0);

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题