位置: 编程技术 - 正文

php中ob函数缓冲机制深入理解(php对象缓存)

编辑:rootadmin

推荐整理分享php中ob函数缓冲机制深入理解(php对象缓存),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php输出缓冲区,php ob_flush,php ob_flush,php ob缓存,php ob_flush,php ob缓存,php ob缓存,php 缓冲区,内容如对您有帮助,希望把文章链接给更多的朋友!

下面就php中ob函数缓冲机制通过文字说明加代码分析的形式给大家展示如下:

对于一个刚刚入门的php程序员来说,php缓冲区是几乎透明的。在他们心目中,一个echo print_r 函数,数据便会‘嗖'的一声飞到浏览器上,显示出来。我也一直如此单纯地认为。 其实,在技术的世界里,向来都是由简单到复杂,也许那些技术开发者开始单纯如你我,但是面对残酷的现实,不得不调整策略,以期提高机器运行效率,最后想到了那些让我们赞叹的idea。

  说到缓冲,也就是buffer,这里必须要和缓存做一下比较,单纯地比较定义是无意义的,莫不如看看它们做什么。缓存解决的是如何快速查找利用数据,节省cpu消耗问题,而缓冲解决的是高速cpu与低速I/O设备不匹配的问题。

  再说下本文的另一个主角,ob函数,ob是output_buffering的简写。既然ob函数是php扩展函数,那么ob函数主要操作的也就是php buffer了。

  简单说完本文两个主角,我们还必须回归开头的主题,echo print_r函数输出的数据是怎么到达浏览器让用户看到的呢?实际上的历程是这样的:

  我们可以清楚地看到,从echo、print_r函数到发送信息给客户端经历了两个缓冲区,在客户端还经历了一个浏览器缓冲区。我们本文主要讨论的是php output_buffering。

  未使用ob函数时缓冲区的使用情况

  我们的代码很多时候是根本不使用ob函数的,那么它们使用缓冲区了吗?这要看php设置情况。缓冲区是通过php.ini中的output_buffering变量控制的。其默认值是off,可以设置为on来打开buffer。打来buffer后,即便程序中没有用ob函数,实际上代码也是使用了缓冲区的。另外,不管php.ini中output_buffering的设置,cli模式下的php始终默认是关闭的。

  为什么要是缓冲区呢?简单来说,高速的cpu早早处理完自己的数据,想通过线路传递给用户,但是线路太窄了,一下输送不过去。如果引入缓冲区,cpu可以将快速将生成的数据放入缓冲区,然后自己哪儿凉快儿哪儿呆着这歇着去了。缓冲区根据指令适时将数据输出。这个样就合理解决了高速cpu与低速I/O设备的矛盾了。

  缓冲区的数据什么时候输出呢?1,当缓冲区满了的时候,缓冲是有容量大小的,到达极限则会自动输出内容。2,脚本执行完毕。很多小程序输出内容没那么多,总不能等到缓冲区满了再输出吧~这一点再自然不过。

  使用ob函数时缓冲区的使用情况

php中ob函数缓冲机制深入理解(php对象缓存)

  打开输出缓冲。这个函数是我们调用最多的一个函数之一。在output_buffering设置为on或者x k的情况下,这个函数与其说是打开输出缓冲,还不如说将输出缓冲扩充到很大。当然在output_buffering设置为off的条件下,ob_start会起到打开buffer的作用。ob_start()还可以传递一个可选参数 output_callback 函数,php官方手册有详细说明。

  只是得到输出缓冲区的内容,但不清除它。

  这两个函数从字面意思上就可以看出其区别。前者清除缓冲区内容并且关闭,后者仅仅是做清除工作。需要注意的是,使用了这两个函数,在前面使用了echo、print_r等函数不会输出内容。

  笔者曾经试图通过print_r打印出ob_get_contents()的内容,然后调用ob_clean()清除缓冲区,以免影响后面对缓冲区的操作,屡屡失败。仔细想想,print_r的内容再次写入缓冲区,而后面做了ob_clean()的操作,自然不会有任何输出。在ob_clean操作之前调用ob_flush()函数便可达到预想的效果。

  ob_flush()送出缓冲区的内容并且丢弃内容。因而在此函数之前最好采用ob_get_contents()获得缓冲区内容。flush()刷出服务器端缓冲,并且发往客户端。因而从流程上来说,应该是先调用ob_flush()而后再调用flush函数。

  另外说明下再Apache buffer flush()的工作原理:在apache module的sapi下,flush会通过调用sapi_module()的flush成员函数指针,间接使用apache的api::ap_rflush刷新apache的输出缓冲区。当然apache其他模块比如mod_gzip可能改变这个动作的结果,可能自己进行输出缓冲区,这将导致flush()函数产生的结果不会立即被送到客户端浏览器。

  如果你已经熟练掌握ob_get_contents()和ob_clean(),那这个函数就很简单了。因为它是前两者的结合体。它主要是得到当前缓冲区的内容并删除当前输出缓冲区。

  ob函数还有很多,但大部分用法比较简单,理解较为容易。大家可以参照php手册 ,里面会有详细的解释。本文列出了笔者开始并不是很理解的一些函数,当然今后还会有新的问题出现,想到问题并且解决问题,生活的乐趣也许就在此处吧。

以上内容就是本文针对php中ob函数缓冲机制深入理解,希望对大家今后学习有所帮助。

织梦sitemap地图实时推送给百度的教程 在之前,织梦有一套自己主动ping百度的插件,但是后来用不了了,最后百度推出了实时推送链接地址到百度,这样要比sitemap方便好用多了,而且还能保

wampserver改变默认网站目录的办法 开发过php项目的都知道,大多数都会用到wampserver,接下来小编为大家分享下wampserver改变默认网站目录的方法。需要修改的文件有以下三个:apache2的配

PHP-FPM之Chroot执行环境详解 在PHP-FPM中设立chroot,有很好的隔离作用,提高系统安全性,但是要想建立一个合理的PHP-FPMChroot环境难度有点大,比用debootstrap等工具建立还要麻烦,下

标签: php对象缓存

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

上一篇:UTF-8正则表达式如何匹配汉字(正则表达式u4e00)

下一篇:织梦sitemap地图实时推送给百度的教程(织梦地图插件)

  • 工程会计税率
  • 稽查查补的税款用什么时候的税率表示
  • 停车费收入增值税申报表怎么填
  • 处置固定资产简易征收
  • 出口退税发票未稽核可以申报退税吗
  • 出纳可以编制工资单吗
  • 结转城建税和教育费附加
  • 外企农业公司
  • 酒店应不应该为员工提供澡堂
  • 不按出资比例取得分红怎么纳税?
  • 建筑业异地预缴税款怎么抵扣
  • 当月商品已出库货款未收到怎么做分录?
  • 融资租入固定资产属于资产吗
  • 存货呆滞是什么意思
  • 银行本票支付货款,余额退回
  • 增值税发票本月没用完可以下月用吗
  • 国税一个月没报税罚款多少
  • 工伤赔款付医药费怎么会计分录
  • 长期驻扎外地的员工
  • 销售库存商品的记账凭证
  • 劳务公司如何确定收入
  • 期末增值税进项税大于销项税的金额计入哪里
  • 代扣代缴的增值税可以作为进项税抵扣吗
  • 收到预付款怎么给客户写协议书
  • php数组函数输出《咏雪》里有多少"片"字
  • 私立医院执行什么会计准则
  • h3cmsr3020路由器
  • win切换平板模式
  • macbookprofacetime
  • 免抵退税务处理
  • directx/?
  • 违约金的增值税税率
  • 关于固定资产管理
  • 企业出售生产设备能开票吗怎么开
  • promise thenable
  • web实训报告怎么写
  • 大前端最新
  • spring获取bean的完全限定类名
  • 应届生优势大吗
  • php 伪造HTTP_REFERER页面URL来源的三种方法
  • 增值税进项税抵扣凭证
  • 查询公司对公账户
  • 公司开户限额一般多少
  • 帝国cms首页调用其他网站数据
  • 记 vue-cli-plugin-dll 使用,优化vue-cli项目构建打包速度
  • 一般纳税人超过多少要交税
  • 轿车折旧年限为几年
  • 公司签发银行承兑汇票的行为属于什么
  • 一般纳税人申请条件
  • mysql 子查询
  • 低值易耗品的账务处理图片
  • 公司多交的社保费法律规定需要退还吗
  • 公允价值变动损益属于什么科目
  • 应收账款应付账款借贷方都表示什么
  • 生产成本的主要构成要素
  • 设备维保费如何计算
  • 增值税系统技术维护费 减免政策
  • 问答:分支机构是否需要设立账簿
  • 怎样用eclipse敲代码
  • win10禁用windows键
  • windows10周年更新
  • MAC修改Dock烟雾效果及设置抓屏快捷键的方法
  • 应用商店如何更新软件
  • linux快捷命令
  • winxp系统优化
  • windows万能wifi
  • win7系统删除文件夹怎么恢复
  • win10系统自带功能
  • 安卓十游戏怎么玩
  • js控制横向滚动条
  • js中refresh
  • 简述javascript的主要特点
  • js table插件
  • 亲测源码论坛
  • 使用jQuery制作动画与特效及插件的应用
  • 商场销售高档化妆品需要缴纳消费税吗
  • 四川办税大厅
  • 企业补缴公积金 归集额增加
  • 税务ukey版商品编码怎么添加
  • 长途汽车车次号
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设