位置: 编程技术 - 正文

PHP 输出缓冲控制(Output Control)详解(php处理304缓存)

编辑:rootadmin

推荐整理分享PHP 输出缓冲控制(Output Control)详解(php处理304缓存),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php缓存机制有哪些,php 缓冲区,php常用的缓存技术汇总php技术之缓存机制的好处,php输出缓冲区,php中的九大缓存技术,php缓存机制有哪些,php写缓存,php输出缓冲区,内容如对您有帮助,希望把文章链接给更多的朋友!

php 缓冲简介

其实我对php ob 系列印象还是很模糊,具体怎么玩的,还不是很了解,平时curd,确实对这些内容没有深入。作为phper 甚是惭愧。网上搜了一通,互相copy,代码运行不能出现作者所描述现象,本文良心出品,代码都是作者运行过。

  当执行输出的时候,比如 echo,print。输出并没有立即送给 web server, 而是将数据写入 php buffer。php output_buffering 机制好处当然提升性能。其实 php 文件最终在浏览器上显示,走过3个缓冲阶段: php buffer=》web server buffer=》browser buffer。 最后显示到浏览器

  默认情况下,php buffer 是开启的,而且该 buffer 默认值是,即4 kb。你可以通过在php.ini配置文件中找到output_buffering配置。buffer是一个内存地址空间,Linux系统默认大小一般为(4kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的设备之间传办理数据的区域。通过buffer,可以使进程这间的相互等待变少。这里说一个通俗一点的例子,你打开文本编辑器编辑一个文件的时候,你每输入一个字符,操作系统并不会立即把这个字符直接写入到磁盘,而是先写入到buffer,当写满了一个buffer的时候,才会把buffer中的数据写入磁盘,当然当调用内核函数flush()的时候,强制要求把buffer中的脏数据写回磁盘。

举个例子

header()必须在任何实际输出之前调用,但是我们程序已经输出了,却正常运行。在看下面的代码:

上面程序说明程序并没有立即输出,而当调用ob_flush 函数的时候才刷新缓冲,输出。

ob_flush() 与 flush()

ob_flush() , flush() 函数php 手册上都有详细的说明,你可以去查阅一下。二者的区别是:

PHP 输出缓冲控制(Output Control)详解(php处理304缓存)

ob_flush() 是刷新PHP自身的缓冲区

flush()是 它是刷新WebServer 服务器的缓冲。输出到浏览器。但是会出现下面的情况:

个别web服务器程序,特别是Win下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止。 有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。 甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape 浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在接受到 </table> 标记之前,不会显示出整个表格。 一些版本的 Microsoft Internet Explorer 只有当接受到的个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。

比如:

上面的代码 在 chrome 浏览器上面 是一行一行的输出,在ie系列的浏览器则是全部输出。其实就是上面的 第四条一些浏览器只有当接收个字符才开始显示。把上面的代码改成下面形式:

这样在ie下面就会一行一行输出,因为超过个字符。

ob 其他函数说明

1.ob_end_flush 与 ob_end_clean

  end 的顾名思义就结束,关闭缓冲区,都是关闭输出缓冲,一个是输出缓冲区,一个是清除。比如

上述代码是一下输出全部内容,而不是一个一个输出。ob_end_clean() 不是关闭了缓冲了?怎么不是一个一个输出呢,其实我们上面也说了,php 不是直接输出给浏览器,而是 web server。 虽然php 没有了 缓冲。但是web server 还是有的。所以下面代码:

加上flush(),就会一行一行输出。 如果把ob_end_clean 换成 ob_end_flush 会把 before 输出来。

其他函数 可参考手册,比较简单。

总结

php 脚本到浏览器,要经过 php buffer=》web server buffer=》browser buffer。 最后显示到浏览器。 缺一不可。 所以我们要 ob_flush 和 flush 以及加上 echo str_pad('',) 才能调试出你想要的效果。

标签: php处理304缓存

本文链接地址:https://www.jiuchutong.com/biancheng/301711.html 转载请保留说明!

上一篇:PHP中利用sleep函数实现定时执行功能实现代码(php sleep函数)

下一篇:php flush无效,IIS7下php实时输出的方法(php use of undefined constant)

  • 未取得房屋产权证租赁
  • 实收资本实务处理办法
  • 实收资本印花税税率多少
  • 所有小规模都能抵税吗
  • 开业费用属于什么费用
  • 事业单位的会计制度是什么
  • 企业资产损失所得税税前扣除办法
  • 开发区代管
  • 短期借款,应付票据,应付账款和应交税费属于
  • 白酒销售环节交消费税吗
  • 商业汇票的使用范围
  • 被收购的收入计什么科目
  • 事业单位借款怎么做账
  • 车间设备维修费计入制造费用吗
  • 销售固定资产未收到钱
  • 报关单上金额要和合同上一样吗
  • 销售礼盒增值税税率
  • 关于行邮税四档调三档
  • 专票开错了可以作废吗
  • 烟酒发票可以抵扣所得税吗
  • 企业所得税年报错了怎么更正
  • 小微企业附加税优惠政策2023
  • 成品油发票应该怎么冲红?
  • 专票地址不对可以重开吗
  • 开具红字发票信息表对方未接受到怎么办
  • win10老是错误
  • linux的使用场合
  • win10 1909无法连接到这个网络
  • 盆栽玉树的养殖方法
  • 苹果手机最贵的软件是哪个
  • vue input value
  • 基西米河生态退化原因
  • 前端的基本知识
  • 什么叫自适应控制
  • 产品体验是什么意思
  • 公司注销账面实收资本如何处理
  • php中foreach循环遍历数组
  • 如何用python制作人工智能
  • 承兑汇票无法兑付
  • js检查json是否合法
  • php数组怎么实现的
  • php读取php文件内容
  • 通行费电子发票抵扣填写到附表二的第几栏次
  • 企业注销时实收资本清算时要作资产处置收益交所得税吗
  • 企业缴纳水利建设基金的依据是什么
  • php注册系统
  • phpcms使用教程
  • 固定资产清理包括什么会计科目
  • 本月购进原材料取得增值税专用发票
  • 一个分组名称
  • 失控发票要补交所得税吗
  • 接受土地使用权的会计分录
  • 购入厂部用小汽车一部是管理费用吗
  • 质保期内出现质量问题,一直没有修复
  • 境外分回的股息在本国抵免限额怎么算
  • 以前年度负债调整
  • 坏账收不回来如何做分录
  • 预收账款计入应收账款怎么弄
  • 如何审计营业收入
  • 固定资产原值如何计算
  • 企业超过一定金额采购需求
  • 如何从财务报表中分析企业偿债能力
  • Mysql inner join on的用法实例(必看)
  • WIN10系统中WPS字体颜色浅
  • 如何知道文件的解压密码
  • win8蓝牙设置在哪
  • win7笔记本触摸板怎么开启
  • js倒计时结束操作
  • 安卓新创手势
  • 什么是从零开始
  • 对js关键字命名的优点
  • Unity 中WWW加载 AssetBundle---中文路径
  • javascript总结笔记
  • js判断用户输入密码
  • js菜鸟编程
  • 安卓art set
  • 定期定额纳税申报表应税项应填哪个数
  • 汽车维修增值税专用发票
  • 国家税务总局四川省电子税务局界面
  • 伴生矿和伴采矿的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设