php将文件添加到压缩包中实现文件下载,最后下载下来的压缩包打不开,提示压缩包损坏。

错误代码如下:(网上大部分代码都是这种)

$filename=$_POST['del'];if($filename!=''){                     //去掉空值的情况(没有选中任何项,无表单传值)$fileurl = "upload/download.zip"; //最终生成的文件名(含路径)if(!file_exists($fileurl)){      //重新生成文件$zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释if ($zip->open($fileurl, ZIPARCHIVE::CREATE)!==TRUE) {exit('无法打开文件,或者文件创建失败');}foreach($filename as $val){$val=iconv("utf-8","gb2312",$val);echo $val;if(file_exists("upload/$val")){$sql = "UPDATE file SET down=down+'1' WHERE filename = '$val'"; //执行更新点击数的语句$conn = @mysqli_connect("localhost","root","123456","resourceadm");mysqli_query($conn,$sql); //执行语句$zip->addFile( "upload/$val", basename($val));//第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下}}$zip->close();//关闭}if(!file_exists($fileurl)){exit("无法找到文件"); //即使创建,仍有可能失败。。。。}header("Cache-Control: public");header("Content-Description: File Transfer");header('Content-disposition: attachment; filename='.basename($fileurl)); //文件名header("Content-Type: application/zip"); //zip格式的header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件header('Content-Length: '. filesize($fileurl)); //告诉浏览器,文件大小@readfile($fileurl);unlink($fileurl);}

通过运行上面的代码将会出现压缩包损坏问题。

解决办法是在最后加上两行代码:

ob_clean();
flush();

正确代码如下所示:

$filename=$_POST['del'];if($filename!=''){                     //去掉空值的情况(没有选中任何项,无表单传值)$fileurl = "upload/download.zip"; //最终生成的文件名(含路径)if(!file_exists($fileurl)){      //重新生成文件$zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释if ($zip->open($fileurl, ZIPARCHIVE::CREATE)!==TRUE) {exit('无法打开文件,或者文件创建失败');}foreach($filename as $val){$val=iconv("utf-8","gb2312",$val);echo $val;if(file_exists("upload/$val")){$sql = "UPDATE file SET down=down+'1' WHERE filename = '$val'"; //执行更新点击数的语句$conn = @mysqli_connect("localhost","root","123456","resourceadm");mysqli_query($conn,$sql); //执行语句$zip->addFile( "upload/$val", basename($val));//第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下}}$zip->close();//关闭}if(!file_exists($fileurl)){exit("无法找到文件"); //即使创建,仍有可能失败。。。。}header("Cache-Control: public");header("Content-Description: File Transfer");header('Content-disposition: attachment; filename='.basename($fileurl)); //文件名header("Content-Type: application/zip"); //zip格式的header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件header('Content-Length: '. filesize($fileurl)); //告诉浏览器,文件大小ob_clean();   //*******************修改部分*******************************flush();     //*******************修改部分*******************************@readfile($fileurl);unlink($fileurl);}

最后就可得到下载后正常的压缩包了

php实现文件下载,提示压缩包损坏解决方法相关推荐

  1. php下载文件压缩包已经损坏或未知格式,这个压缩文件格式未知或者数据已经被损坏解决方法...

    "这个压缩文件格式未知或者数据已经被损坏"解决方法 1.如果是从网上下载的压缩文件,很有可能是网站提供的本身就是损坏的压缩文件.如果重新下载之后仍然是损坏的,可以从其他网站下载. ...

  2. U盘显示文件或目录损坏且无法读取(U盘提示无法访问解决方法)

    按 Win + R 组合键,打开运行,并输入:cmd 命令,确定或回车,打开命令提示符窗口: 命令提示符窗口中,输入:chkdsk g:/f 命令,其中的g是指你U盘的盘符,如果你的U盘盘符为f,这里 ...

  3. 《方舟生存进化》单机存档损坏解决方法

    <方舟生存进化>在游玩时,如果停电或是其他因素导致存档损坏的玩家不在少数,大家知道怎么解决吗?带来的<方舟生存进化>单机存档损坏请添加链接描述解决方法,希望对大家有用. 盖竞技 ...

  4. 计算机文件丢失系统无法启动,文件损坏或丢失windows无法启动_windows无法启动文件损坏解决方法...

    由于文件损坏或丢失造成windows无法启动,出现这种情况一般是非正常关机或者是病毒破坏或者是加载了你安装的其它软件的文件出问题,一般人就直接重新装系统去解决,但是有些电脑上有重要的数据和程序不能直接 ...

  5. 我的世界服务器存档损坏如何修复,我的世界怎么恢复存档-《我的世界》角色卡死存档损坏解决方法及游戏常识...

    首先你要找到你的游戏目录,然后再游戏目录下找到save文件夹 打开save文件夹,这时候你会看到一个叫level.dat_old的文件 好了就是他了,level.dat_old的_old去掉,覆盖原来 ...

  6. 机械硬盘显示提示格式化的解决方法

    提示格式化说明这个盘的文件系统结构损坏了.机械硬盘显示提示格式化的解决方法具体恢复方法可以看正文了解(不格式化的恢复方法) 提示格式化说明这个盘的文件系统结构损坏了.机械硬盘显示提示格式化的解决方法具 ...

  7. Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved?

    Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved? 参考文章: (1)Myeclipse开发环境下文件 ...

  8. pycharm连接mysql1193错误_pycharm连接mysql数据库提示错误的解决方法_数据库

    忘记phpmyadmin密码怎么重置_数据库 重置phpmyadmin密码的方法是:1.停止mysql服务:2.跳过验证启动mysql:3.重新设置密码:4.更新权限:5.重新启动mysql,如[ki ...

  9. WCF中使用自定义behavior提示错误的解决方法

    WCF中使用自定义behavior提示错误的解决方法 参考文章: (1)WCF中使用自定义behavior提示错误的解决方法 (2)https://www.cnblogs.com/shenba/arc ...

  10. TCP/IP协议损坏解决方法:

    TCP/IP协议损坏解决方法: 参考文章: (1)TCP/IP协议损坏解决方法: (2)https://www.cnblogs.com/xiaolong617/articles/occur_solut ...

最新文章

  1. gzcms技术开发文档
  2. 域 和 Session 的问题
  3. 【机器学习】朴素贝叶斯代码练习
  4. 搭建和测试Android JAVA NDK
  5. 机器人彩铅画_彩铅画嗔
  6. (2.1)DDL增强功能-数据类型、同义词、分区表
  7. gd32 定时器时钟_漫谈LiteOS之开发板-Timer(基于GD32450i-EVAL)
  8. Pig、Hive、MapReduce 解决分组 Top K 问题
  9. Windows应用替代方案接龙
  10. 河南2002年计算机比赛,河南省体育局竞技体育管理信息系统(TYMIS2003)
  11. Javafx Scene Builder使用教程
  12. think in google--think in 互联网系列2
  13. 网络黑市规模达千亿元 信息泄露成最大安全威胁
  14. 工业互联网时代下橙色云CDS的商机直通车服务
  15. 数字医学影像工作站相关资料汇总
  16. Silverlight 2 打造饭否Show
  17. [ 2204阅读 ] 句子简化题 | 细节题 | 排除题 | 推理题 | 目的题 | 句子插入题 | 总结题
  18. 一文读懂PCB阻焊工艺
  19. 电脑的ODBC数据源里面没有Microsoft Access Driver(*.mdb),并且已经装上了microsoft office 2003
  20. java网上商城学年论文_基于java框架的网上购物商城程序(毕业设计)+论文

热门文章

  1. 基础会计学习笔记4 会计核算基本方法(会计工作的主要内容)
  2. Linux查看系统运行时间
  3. 【HDOJ】3505 Writing Robot
  4. C++ HOOK PC微信实现无限制多开,理论支持所有版本,本文使用微信 3.0.0.47
  5. error C1041: 无法打开程序数据库“xxx\vc140.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用/FS
  6. 教师资格证面试试讲规律!
  7. 从原理上搞懂编码——究竟什么是编码?什么是解码?什么是字节流?
  8. 4g内存 mysql_mysql 4G内存配置表
  9. dubbo服务暴露与注册
  10. 手写MyBatis,纯手工打造开源框架(第三篇:运筹帷幄)