php怎么扩展缓存,实时生成并下载大数据量的EXCEL文件?
对于任何一个网站肯定是少不了下载功能,常见的下载功能有图片、视频、Excel表格,如果文件比较小的话,那么不会遇到任何的问题,但是当文件信息而超过了PHP的最大内存,那么在这个时候它就会有的内存溢出的问题。
那么它们是因为什么而发生的?对于这个过程的原理才是我们应该真正要去弄明白的事情
下载大数据量的EXCEL文件为何要报错?PHP在下载大Excel表格的时候,那么首先它是需要去把MySQL的数据从硬盘上面读取到内存,但读取它是一次性载入到我们的内存,如果说它一次性载入的数据量远远大于最大内存,然后再来执行浏览器的业务下载。那么这个时候它就会发生我们这个内存溢出。
就比如:说我们现在有100M的数据量,但是我们PHP内存最大只有64M,那么这个它肯定是装不了的,我们可以把那个内存比喻为一个水杯,这个水杯的容量比喻为内存,现在杯子最大容量为64L。你要存放100L。肯定放不下
大事化小,小事化了。拆分成段从上面可以看到文件下载,它是分为两步,首先是载入内存然后执行浏览器的输出下载,那么既然大型文件一次性载入不了,那可以采用 “大事化小,小事化了”思路,我们可以实现边写边下载,也就是分批次的读取与写入。
因为用户的话,只要最终拿到这个文件就可以,对于浏览器的下载原理不需要关心。只需要给到文件下载提示给用户即可,然后后端在实时的分批次的写入到要下载的文件当中。
实现思路步骤:
1、一设置浏览器下载Excel需要的Header
2、打开 php://output 流,并设置写入文件句柄。
注:(php://output,是一个可写的输出流,允许程序像操作文件一样将输出写入到输出流中,PHP会把输出流中的内容发送给web服务器并返回给发起请求的浏览器)
3、获取数据库所有数据量,并设置每次查询的条数,通过这两个值计算分批查询的次数
4、基于分批查询的次数循环查询数据库,然后写入到文件中,同时清除本次操作变量内存,刷新缓冲到浏览器,让浏览器的文件始终实时保持到最新的大小
注:刷新用ob_flush、flush()PHP的I/O流在这里我们用到了PHP的一个IO的输入输出,也就是我们常用的
php://input php://output。php://input
php://input可以读取原始的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。php://input不能用于enctype=multipart/form-data”.
注:HTTP_RAW_POST_DATA 在PHP7已经被废弃,它不是$_POST额php://output
php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区。
综上:实现思维与原理很重要如有感悟,欢迎关注额。(* ̄︶ ̄)比如Facebook需要大量顶尖高手来开发?
内行看门到,外行看热闹。用这一句话来说不为过。为啥是这样?
第一,网站开发首先用户体验不能差什么是用户体验?
ISO 9241-210标准将用户体验定义为“人们对正在使用或期望使用的产品、系统或者服务的认知印象和回应”。
ISO在定义的补充说明中有着如下解释:用户体验,即用户在使用一个产品或系统之前、使用期间和使用之后的全部感受,包括情感、信仰、喜好、认知印象、生理反应、心理反应、行为和成就等各个方面。
试想用户在用你网站的时,遇到网页加载慢、异常报错、操作受阻等体验不好的情况。 那会用你的网站吗? 怕是不骂你都不错了。
所以,用户使用网站的功能都是通过一系列处理简化后的,为的就是让用户操作起来简单方便,视觉看起来赏心悦目。运行起来流畅自如。
如果这里面那个环节除了问题,都会严重的影响用户得体验。
一般网站大致流程开发如下:产品拿需求、ui设计原型图、前后端讨论技术实现、编码、测试、上线
从一开始的雏形到以后使用都要经历很多需求更改。如果这各项加工流程没得数据指标,你敢保证结果?
第二,看似平静得网站,内部确实错综复杂上面只是功能需要的专业性,但像FCAEBOOK这样体量得网站,有着20多亿用户,而且还需要世界性得提供服务。那在技术要求会更加有难度。
首先一个用户所操作的一个功能。是需要发送一个HTTP网络请求到后端的服务,这里面都需要历经很多阶段。
HTTP请求流入WEB服务器、WEB服务器把请求交给应用服务器(php tomcat等)、调用缓存、读取数据库、操作系统调度、进程切换等等环节。每一步要得都是时间和稳定性。
业界常用4个9表示,就是全年服务器使用时间要达到99.99%。使用期间不能出问题。
如果你的用户量非常多,那么你的处理速度肯定会明显下降。
就好像你春节回家,为啥有个春运期间和从你动身就一直堵的情况呢?
因为人多了,每天汽车班次就那么多,处理不过来呀
为保证大量用户能够正常使用。你就需要大量的服务器和采用技术来对网站架构进行优化。
才能保证这么多用户正常访问。可问题又来了?
几十亿的用户自身得数据和使用网站功能所产生的数据。要怎么存储这么多服务器的健康检查、负载监控、流量预防等等一系列。都是需要高级的技术才能解决。举个例子:
你在操场里面数100个人比较容易,但如果说现在操场里面有一亿个人,你能够数过来吗?并且这一亿个人还会到处跑。你应该怎么管理?
第三,一颗螺丝钉坏了,将影响了一个国家的命运大家应该都听过一颗螺丝钉毁了一个国家的故事。
因少了一颗铁钉,掉了一块马蹄铁,折了一匹战马,败了一场战争,亡了一个国家
如果几十亿的用户在使用过程中。因为某个技术环节出了问题,而导致类型的请求比较费时。
那间接性得,这个网站对于用户的应答就会变得很慢,甚至访问报错。用户体验肯定就不好。
如果用户的体验不好,就会导致使用网站的人减少或者差评增多。
那影响到的就不是一个网站,而是一个互联网公司经济命脉。那还有世界500强的facebook?
所以像facebook、BAT、TMD等这样大型网站当中。要求得都是专注于某一个技术的领域高级工程师。
总结一个网站的技术复杂度,取决于它需要服务的用户量。用户越多越复杂。技术的细节要求也更高
有帮助,请关注@莲花童子哪吒 一起学习提升自己
你觉得关键词该如何布局?
根据问题,我来谈谈在云服务器上建立网站吧。
现在建立网站很方便,一般分为三步——购买服务器、搭建网站、运营(包括你的关键词定位)。
购买服务器现在云服务器兴起,每个人都可以去各大厂商购买一台属于自己的服务器了。比起以前在自己的电脑上搭建,云服务器更方便更安全,更重要的是目前宽带是封禁网站主要的端口的,自己在家并不能搭建一个很方便的网站给别人访问。
这里推荐两大厂商——阿里云和腾讯云。
如果你是学生,你可以以超低的价格购入一台足以满足网站搭建配置的服务器。里面还有些许选择,我这里建议可以使用Linux系列的系统,即使你不懂命令,你也可以用超级方便的面板来管理网站。我使用的是宝塔面板,十分方便。
按照宝塔官网的教程输入命令后,宝塔面板完成搭建(这里要注意你需要进入服务器后台开放宝塔的端口)。通过IP和端口号登录面板以后,选择好配置(比如php、mysql之类),它会自动帮你部署网站运行的环境。
完成以后,你可以添加一个网站域名,域名也可以从上面两大厂商购买。域名可以通过厂商的控制台解析到你的服务器IP。
搭建网站推荐使用博客系统来搭建,最常用到的是Wordpress。你只需要去他的官网下载最新的安装包上传到服务器(通过面板操作,很方便),然后解压到之前创建的网站目录之下,就可以通过在浏览器种输入IP来进入Wordpress的配置向导了。配置好以后,你就进入到网站后台,不管是发表文章,还是主题的选择都是傻瓜式的,非常简单。
运营网站建立伊始,你需要确认好网站的定位。比如我做科技科学类的网站,那么最好在设立关键词时,就围绕这个领域。因为,你的网站想要被更多的人访问到,你必须要去各大搜索引擎服务商申请收录自己的网站,比如谷歌的Search Console与百度收录。
这样的话,如果你不从一开始就设置好关键词,收索引擎会显示你之前的内容,那么访问者可能就会对你的网站产生误解,造成了网站内容和关键词对应不上的情况。因此,网站设立之初就应该想好自己今后要做成什么,关键词定位也要围绕主题内容!
这样,你只需要发布你自己的作品,搜索引擎就会不定时的收录。如果你的内容很新颖,跟得上热点,那么你的网站可能就会在排名上更靠前。一个网站就正式进入了良性发展的阶段了。
企业类网站如何加速?
网站建设和设计者都会很关心一个问题,如何让网站的打开速度更快一些,文汇建站当主机位置和线路已经选择了之后,我们仍然可以在代码和网站的设置上进行一些优化,达到网站加速的效果
1、设置静态内容缓存时间
浏览器会用缓存来减少http请求数来加快页面加载的时间,如果你有权限的话,你可以通过修改IIS或.htaccess文件来实现,如果你的网站更新速度很快,那么首页的html、asp、php等网页文件可以不用设置缓存时间,而变化频率不高的css、图片、flash等文件等可以设置一个较长的时间,如24小时或几天时间。
2、网站启用Gzip压缩
几乎所有的浏览器都支持Gzip压缩,并且Gzip压缩的比例也很高,通常都可以压缩50%上下,有的甚至更高,这就可以大大缩短数据的传输量,不管是动态网页还是静态网页都可以启用Gzip,不管是Windows服务器还是Linux服务器都支持Gzip,它可以为你节省网页文件(html、asp、php等)和css文件的传输时间。
3、减少HTTP请求数
网页、css、图片、flash等等这些都会增加http请求数,减少这些元素的数量就能减少响应时间。
4、图片使用原始尺寸和容量
如果你想使用图片,请尽量先根据页面大小需求规划图片的尺寸,在页面调用图片时也最好不要缩放,而使用原始尺寸大小。
不管是jpg、gif、png图片,在不减少观看效果的情况下适当降低图片的质量。
5、清除无效的脚本
无效的代码块和隐性代码(没有正常显示的),以及减少注释文本量,清除不必要的空格、空行会为你节省意想不到的文件容量,这一工作包含所有的脚本:html、asp、php、css、js等。
6、减少外网站引用
减少从网站外部调用资源,可以加快网页的调用速度,除非从外部调用的资源既稳定有速度快,如从百度或google引用的代码。
7、把影响布局和表现的css放顶部
把css放在head之间,可以让浏览者能尽早的看到网站的完整样式,不至于错位和混乱。
8、把不影响表现的js等放底部
如果js没有对内容表现没有影响,如,统计类脚本,就可以放在底部。
以上是比较容易实现的,如果你是大型网站,资金充裕,可以考虑的就是cache、cdn加速了
实际上却很厉害的软件?
经常搜集各种好用的软件的我,这个问题太有发言权了。
以下推荐的软件,都是既实用,又良心,纯净简洁,无捆绑劫持,无广告弹窗。
为了方便大家查看,附上目录:
1.PotPlayer 视频播放器
2.Everything 文件快速搜索
3.QQ输入法 没有弹窗的输入法
4.QQ影音 纯净的视频播放器
5.calibre 电子书管理阅读器
6.Snipaste 截图贴图神器
7.FScapture 长截图工具
8.Geek 卸载工具
9.微PE工具箱 装机维护工具
10.Quick Startup 软件自启动管理
11.CCleaner 垃圾清理工具
12.ScreenToGif 屏幕录制成GIF
1.PotPlayer 视频播放器
有口皆碑的本地视频播放器
体积小但功能丰富,占内存小,不会给你推送烦人的广告,界面简洁,启动极快,有强大的内置解码器
2.Everything 文件快速搜索
系统文件管理器自带的搜索功能实在是太慢了,找个文件要转半天。
Everything不一样,它的搜索速度可以说是实时的。当你忘记了某个文件放在哪里,你只要在软件中输入文件名称或是关键词,它就能在瞬间检索你的硬盘,帮你找到它。
3.QQ输入法 没有弹窗的输入法
对,QQ输入法,你没有看错。这可能是老马家最良心的软件之一了,别家输入法该有的功能它都有,关键是,它不会没事就给你弹窗。
4.QQ影音 纯净的视频播放器
提到了QQ输入法,就不得不提QQ影音了。
时隔两年,QQ影音悄然更新了4.0版本,界面更加清新,性能全面升级,支持了更多的视频格式。但整体依然还是那么的简洁、纯净,让人简直不敢相信这是腾讯的产品。
5.calibre 电子书管理阅读器
这是一款好用的电子书管理软件,用Kindle的朋友必备。可以方便地导入书籍,转换格式。calibre有一个内置的电子书阅读器,功能丰富,支持所有主流的电子书格式。
6.Snipaste 截图贴图神器
还在用QQ的Ctrl+Alt+A吗?看看这个截屏神器。
这是一款简单好用的截图软件,自动检测界面元素区域,像素级的鼠标移动控制、截图范围控制,截图质量高、画质清晰,也可以让你将截图贴在屏幕上。
除了截图之外,它还支持在截图中添加矩形、椭圆、线条、马赛克、铅笔等标注,有取色器功能。
7.FScapture 长截图工具
功能强大的抓屏工具,可以长截图,编辑图片,屏幕录像,将图像转换为 PDF 文件,屏幕取色,屏幕标尺等等。
更为惊人的是它只有2M。
8.Geek 卸载工具
还在用系统控制面板的程序和功能卸载软件吗?流氓软件卸载不掉?软件卸载总是有垃圾文件残留?
试试Geek吧,不仅能完美解决上述问题,而且软件仅5M,绿色纯净无广告。
9.微PE工具箱 装机维护工具
有时候系统故障需要重装系统,就要用到PE软件。
这是一款清新简洁的PE安装软件。一键安装,极速启动,而且纯净,没有捆绑。
10.Quick Startup 软件自启动管理
电脑里面各种杂七杂八的软件装多了,很多软件开机时就会偷偷自启动,拖累电脑开机速度,造成电脑开机时卡顿。怎么办呢?
Quick Startup这个软件不仅可以禁止软件开机自启动,还可以设置软件自启动的延迟时间,这样就可以错开软件自启动的高峰,电脑开机速度当然会大大提升。
11.CCleaner 垃圾清理工具
电脑用久了总是要清理各种垃圾文件。
清理垃圾,有CCleaner就够了。千万别跟我提什么管家、卫士这类流氓软件。CCleaner 功能强大,不仅可以深度清理注册表,临时文件、缓存,还能查找重复文件、系统还原、驱动器擦除。
12.ScreenToGif 屏幕录制成GIF
如果你需要录制屏幕GIF,那么这款软件我强烈推荐你使用。
它免费开源、功能强大、体积小巧(只有2M),是我用过里面最方便实用的。
软件的界面非常简洁,可以录制屏幕操作、调用摄像头录制、录制手写画板、还自带一个功能强大的GIF编辑器。
大家如果觉得有用的话,记得点个赞哦~