PHP压缩文件下载,提示压缩包损坏及打不开的解决方法_php 导出压缩包 已损坏_10年老码农的博客-程序员秘密

技术标签: php  

今天正常的导压缩文件,发现一个问题,当数量据大点时,比如我的表有25万个字时,就提示我解压失败

后来我慢慢排查,我把删除临时文件的代码注释掉,让程序生成临时文件。

发现,临时文件只有65kb,且是可以解压力成功的。(浏览器下载同一个zip包有211kb)

后来我又百度许久,网上都说需要加

ob_clean();
flush();

以便把缓存区的数据,制刷到浏览器,但我代码里也加了

后来我去百度了下php的缓存机制(以下这段,摘至网上)

buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区域。通过buffer,可以使进程这间的相互等待变少。这里说一个通俗一点的例子,你打开文本编辑器编辑一个文件的时候,你每输入 一个字符,操作系统并不会立即把这个字符直接写入到磁盘,而是先写入到buffer,当写满了一个buffer的时候,才会把buffer中的数据写入磁 盘,当然当调用内核函数flush()的时候,强制要求把buffer中的脏数据写回磁盘。
同样的道理,当执行echo,print的时候,输出并没有立即通过tcp传给客户端浏览器显示, 而是将数据写入php buffer。php output_buffering机制,意味在tcp buffer之前,建立了一新的队列,数据必须经过该队列。当一个php buffer写满的时候,脚本进程会将php buffer中的输出数据交给系统内核交由tcp传给浏览器显示。所以,数据会依次写到这几个地方echo/print -> php buffer -> tcp buffer -> browser

所以到这,问题可能已经明朗:程序生成的临时文件可以解压,浏览器下载的不行,应该是浏览器下载文件时,还跟着有缓存数据,这种在较大的文件,可能比较明显。

所以怎么解决呢?程序结束时,加个exit;

好了,导出解压成功了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011383596/article/details/113099985

智能推荐

win7下.NET连接oracle,提示错误OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用..._iteye_3619的博客-程序员秘密

最近三天痛苦了,被oracle和.NET之间的连接头都搞大了,经过不但的安装和找原因,终于搞清楚了一下两点:(1)System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”(2)System.Exception: OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用。解决问题一:一连接数据库就出错误,刚开始弹出...

S01E02 Selenium Webdriver自动化编程初步(上)_Hodoor的博客-程序员秘密

Selenium Webdriver自动化编程初步,主要包括了打开浏览器、定位元素等操作。

HDU2037今年暑假不AC_克利斯提亚诺-梅西的博客-程序员秘密

今年暑假不ACTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 40203    Accepted Submission(s): 21480Problem Description“今年暑假不AC?”

【硬见小百科】二十种电容分类详解!_硬见的博客-程序员秘密

【硬见小百科】二十种电容分类详解!一、瓷介电容器(CC)【硬见小百科】二十种电容分类详解!1.结构用陶瓷材料作介质,在陶瓷表面涂覆一层金属(银)薄膜,再经高温烧结后作为电极而成。瓷介电容器又分 1 类电介质(NPO、CCG);2 类电介质(X7R、2X1)和 3 类电介质(Y5V、2F4)瓷介电容器。2.特点1类瓷介电容器具有温度系数小、稳定性高、损耗低、耐压高等优点。最大容量不超过1...

echarts 图表根据容器大小自适应_echarts根据大小撑满容器_我姓王的博客-程序员秘密

var echartFunnel = echarts.init(document.getElementById("live-five")); echartFunnel.setOption(option);window.addEventListener('resize', function () { echartFunnel.re

matlab 图形中使用循环语句标注图例与标题_matlab怎么用循环画图做标记_人间不想清醒的博客-程序员秘密

前记本篇为自己摸索的一个方法,若有其他简便方法可留言一起讨论。关键思路在matlab中没有找到%d的好用法(可能是本人比较菜),只是找到sprinf之类的可以将变量的值进行输出,但是这种很难直接加到plot的图像中。因此,将字符与变量一同拼接为一个字符串,再将该字符串输出在图例与标题中。title_wave=['Waveform of channel ',num2str(num),' after filtering']; title(strcat(title_wave));数字变量可以

随便推点

武汉理工考研复试计算机,2017武汉理工计算机复试_jadecass的博客-程序员秘密

该楼层疑似违规已被系统折叠隐藏此楼查看此楼2017年4月1日愚人节对没错就是愚人节.计算机学院的官网上放出了拟录取名单.半年的长跑终于有了结果本人本科学的也不是计算机的,来自万金油管理学院的信管专业.普通一本.像我这样跨专业夸学校又不是211.985没有亲戚没有熟人考的分也偏低能上也着实是个奇迹。首先从宏观上说一下今年考武汉理工计算机学院的整体情况吧,今年是考研历史上特殊的一年.教育部把非全日制...

xshell 如何一个命令发送给多个窗口_xshell 工具栏放到下面_hadoop_kill_hive的博客-程序员秘密

如何一个命令发送给多个窗口,特别是重复操作的机器中。1、通过菜单栏:查看->撰写栏(勾选上)然后在如下图,2中可以输入命令。2、依次点击下图中箭头所示的地方,勾选:全部会话,然后,在撰写栏上写上你的命令,会发送到上述的所打开的所有会话中(此处打开了三个会话)...

在安卓手机上编写和运行Python 3.x程序_Python_小屋的博客-程序员秘密

董付国老师面向计算机相关专业的教材《Python程序设计(第2版)》和面向非计算机专业的教材《Python程序设计基础(第2版)》同时被评为清华大学出版社2019年度畅销图书。=====...

tomcat在linux下出现乱码问题_tomcat html linux 乱码_Scorpio_ya的博客-程序员秘密

我用的Tomcat,现在遇到乱码问题: 通用的解决方案如下: Java代码  "8080" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />  但是在这里死活不起作用。 监听8080端口的连接器,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用

Mybatisday01___Miracle__的博客-程序员秘密

框架(Framework 半成品软件)框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件框架一般处在低层应用平台(如 J2EE )和高层业务逻辑之间的中间层。Mybatismybatis是一个

springMVC教程-快速入手-深入分析_superdog007的博客-程序员秘密

资源下载:Spring_MVC_教程_快速入门_深入分析V1.1.pdfSpringMVC核心配置文件示例.rar  作者:赵磊博客:http://elf8848.iteye.com 目录 一、前言二、spring mvc 核心类与接口三、spring mvc 核心流程图四、spring mvc DispatcherServlet说明五、

推荐文章

热门文章

相关标签