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 一样的方式 写入到输出缓冲区。
综上:实现思维与原理很重要如有感悟,欢迎关注额。(* ̄︶ ̄)哪里能在线看最新电影?
在线播放
本人比较倾向于选择可以在线播放和下载的网址,而APP或者EXE播放软件对于我并没有那么大吸引力。
首推:去大猫,http://www.7nmg.com/
可直接访问该网址,或者百度“去大猫”,最新电影资源可在线播放和下载,现已可以观看红海、妖2、探2等,无需安装任何播放器。
注意:有时会被暂封,需过段时间就可以访问。
次推:好看站,手机网址http://m.haokanzhan.com/,电脑网址http://www.haokanzhan.com/
同样,可直接登录网址在线播放,无需安装任何播放器,资源更新速度相对前者慢一些,但都是高清电影,资源丰富。
待选:八哥电影,http://m.8gw.com/
可补充好看站中的资源,在线播放,经典电影收录较全。
如何正确学习php?
首先我作为一个优秀的十年开发PHPer告诉你,PHP只要坚持学起来并不难
PHP是后台脚本语言,首先需要掌握一点HTML css js等技术
了解基本web前端知识后,可以学习搭建PHP环境,PHP7基础语法,数据库等知识点
不过建议还是系统化学习能够帮助你更加有效的掌握知识点,并且结合项目实战开发
这样的方法可以让你全面掌握知识点,遇到bug能够自己解决
在这里告诉大家,想要学习PHP技术提升自己|或要进阶中高级架构师系列的PHP| 或者想要加入程序员这个行列的同学|都可以关注我头条号获取学习教程|私信我关键词:PHP
具体获取教程步骤还是原来的配方:一个评论一个名额,在文章底部的评论区留下你们的评论并且转发!来过程序员都知道!
1. 首先在头条右上角点击关注,关注本头条号
2、评论后私信关键词:PHP 或者 php
ps:没有经过手机验证或者是极速版头条、por版本头条都没有私信功能!
正确学习PHP姿势就是这样的,有什么不同的观点可以讨论!欢迎关注留言!
如何成为优秀的PHP全栈开发师?
首先要给提问者泼一盆凉水,全栈有风险,选择需谨慎。
全栈最怕的就是都会一点,再深入一下就啥也不会,不能把全干理解全栈然后自嗨!
现代社会是一个越来越分工明确的社会,每个人的时间精力是有限的不是特别有天赋自信可以驾驭,选择一个点突破人生成就的上限可能会更高。
下面是我个人主观总结的全栈成长轨迹😄
我提取提问里面的3个关键词 优秀 PHP 全栈
提到了PHP应该问的是WEB全栈。全栈的定义需要独立负责整个产品的业务架构、技术架构,完成从产品的idea到上线全流程生命周期中的各个环节,需要在产品、设计、开发、运维等多种角色间切换。
我把全栈分为4个阶段,初级全栈、中级全栈、高级全栈、行业专家。成长到第四阶段最少需要10年。
初级全栈(1-3 年)
理解需求,懂得交互的基本原则;
熟悉现代前端开发流程掌握HTML5;CSS3 LESS SAAS;es6,vue、react等mvvm框架;
熟练掌握PHP语言基础,熟悉各种框架;
熟练掌握SQL,NOSQL;
熟悉服务的发布;
中级全栈(3-5 年)
这个阶段需要的是对内功的修炼。
在前端方面熟练并对js有自己的深刻理解,理解mvvm框架原理,理解webpack等现代前端工具原理。
在后端方面需要数据持久层有深刻的理解和实践经验,熟练掌握Redis等缓存数据库的各种数据结构和使用场景,熟练掌握MySQL等数据库的基本运维和SQL优化。深刻理解PHP各种框架的原理。熟悉各种中间件的使用和基本运维。理解分布式应用,熟悉基本的网络通讯协议。
高级全栈(5-10年)
这个阶段的成长单就技术而言需要更加深入到底层原理才能驾驭百万用户级别以上服务。
前端方面需要具有更扎实的基本功深入到各个平台UI渲染的原理中才能解决类似提高渲染速度和流畅度这样的需求,总结一下就是这个阶段的前端已经不是业务交互代码的搬运工,需要在多端,快跨平台,载入速度,响应性能,兼容性方面有自己的见解,能leader团队为业务提供当下最佳的大前端整体解决方案。
后端方面就更加需要有扎实的数据结构和算法,操作系统,网络通讯的基本功。
熟悉CAP理论,在系统的高可用,高性能,可扩展上有一定的理解和经验。
展开来讲就是需要了解各种架构的模式,深入源码级别的了解各个中间件的原理和高可用架构原理。
了解分布式系统一致性算法原理,在主主,主从,主备高可用架构有一定经验。
深刻理解IO模型,线程模型,序列化方式能写出高性能应用。
深刻理解微服务架构中服务发现,限流,负载均衡,出错处理等组件的原理。
深刻理解Redis,MongoDB,MySQL,HBase,ElasticSearch使用场景和原理。
跟随业界发展理解docker,k8s,Serverless所解决的问题。
行业专家?
本人还在第三阶段发育中,没有概念😅
最后全栈的终极目标是自己创业!
PHP如何自学?
PHP自从我工作已经用了10年了,我简单说一下我的学习路线和总结。
在上大学的时候,我就自学了PHP,当时PHP4还占市场一大部分。那怎么自学才好呢?我建议首先要熟悉计算机的基础知识,尤其是网络方面的,PHP主要用来开发网页,所以在学 PHP 的同时,也要看一下网页开发,例如前端语言 HTML + CSS + JavaScript。
然后是PHP的一些基础语法,内置函数。最好挑选一本入门的书,书上的例子最好亲自抄一遍,自己运行。记住这个非常重要,我当时只是看,后来导致能看懂,不会写,汗。
基础的学的差不多以后,下面就要看一些数据库 MySQL 和服务器 Linux 的内容,了解基本的增删改查的操作和服务器的配置,学会使用命令行。可以在自己的电脑上装一个虚拟机练练手。
这些都了解的差不多后,建议阅读一些开源程序的源代码,看看人家是怎么编程的,这会让你收获很大。
最后,记住,最最重要的是,一定要亲自写,多练,多拿一些小项目练练手,实践与知识结合,这样才能融会贯通。