资讯专栏INFORMATION COLUMN

PHP中output buffering的原理及应用

XUI / 644人阅读

摘要:缓存过程在请求一个的过程中,实际上经过三个缓存程序缓存缓存浏览器缓存开启的两个方法在配置这里去掉号即可在页面中使用通过打开的,则作用于所有的页面。

php缓存过程

在请求一个PHP的过程中,实际上经过三个缓存:

程序缓存

ob缓存

浏览器缓存.

开启ob的两个方法
1.在php.ini 配置 ;output_buffering = 4096 这里去掉;号即可
2 在php页面中使用 ob_start();

通过php.ini 打开的,则作用于所有的php页面 。使用ob_start()打开则只作用于该页面

ob缓存的知识点

在服务中,如果我们开启了ob缓存,则echo数据首先放入到ob中

当PHP页面执行到最后,则会把ob缓存的数据(如果有的话), 强制刷新到程序缓存,然后通过apache对数据封装成http响应包,返 回给浏览器

如果没有ob,所有的数据直接放入程序缓存。 header信息不管你是否开启ob,总是放入到程序缓存。

ob相关的函数 ob_start($callback)
//在当前页面中开启ob,注意callback
ob_start($callback);
ob_get_contents()
//获取当前ob缓存中的内容
ob_get_contents()
ob_get_clean()
//获取当前ob缓存中的内容,并且清空当前的ob缓存
ob_get_clean()
ob_flush()
//将ob缓存中的内容,刷到程序缓存中,但并没有关闭ob缓存
ob_flush()
ob_end_flush()
//关闭ob缓存,并将数据刷回到程序缓存中
ob_end_flush()
ob_clean()
//将ob缓存中的内容清空
ob_clean()
ob_end_clean()
//将ob缓存中的数据清空,并且关闭ob缓存
ob_end_clean()
注意ob_start($callback)的回调

应用场景
在header()发送之前的报错
出错代码

输出:

Warning: Cannot modify header information - headers already sent by (output started at /Users/shuchao/Desktop/test.php:2) in /Users/shuchao/Desktop/test.php on line 3
解决办法

在发送header前开启ob,则所有的echo内容都会到ob里面,从而解决错误。


输出

before_header
after_header

更多精彩,请关注公众号“聊聊代码”,让我们一起聊聊“左手代码右手诗”的事儿。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22096.html

相关文章

  • PHP基础之输出缓冲区基本概念、原理分析

    摘要:返回内部缓冲区的内容,关闭缓冲区。返回缓冲区的长度,如果缓冲区未被激活,则返回。得到所有输出缓冲区的状态。使用输出缓冲,可以将读取的文件读入缓冲区,达到一定大小时传送给用户,再继续读取,实现分片的效果。 一、概念 在PHP运行的过程中,可以将会产生输出的函数或操作结果暂时保存在PHP的缓冲区,只有当缓冲区满了、或者PHP运行完毕、或者在必要时候进行输出,才会将数据输出到浏览器,此缓冲数...

    harryhappy 评论0 收藏0
  • Node.js 度体验

    摘要:创建简单应用使用指令来载入模块创建服务器使用方法创建服务器,并使用方法绑定端口。全局安装将安装包放在下。的核心就是事件触发与事件监听器功能的封装。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。压缩文件为文件压缩完成。 创建简单应用 使用 require 指令来载入 http 模块 var http = require(http); 创建服务器 使用 http.create...

    CastlePeaK 评论0 收藏0
  • ob缓存机制(ob:output_buffer)

    摘要:我们要说一下中的缓存大概有哪些在中,我们可以粗略的将缓存分为客户端缓存缓存,服务器端缓存缓存。由于是基于架构的,所有,我们可以理解为浏览器端的缓存,服务器端缓存。 ① 我们要说一下php中的缓存大概有哪些! 在php中,我们可以粗略的将缓存分为客户端缓存(Browser缓存),服务器端缓存(Server缓存)。由于php是基于b/s架构的,所有,我们可以理解为浏览器端的缓存,服务器端...

    stormgens 评论0 收藏0
  • 浅析PHP输出缓冲控制

    摘要:默认为是一个回调函数,将脚本的所有输出,用所定义的函数进行处理。在输出缓冲区的回调函数中使用这些函数,会导致未定义的错误。 简介 PHP有输出时,可以用输出控制函数来控制输出 缓冲阶段 ob_start(),将内部缓冲区(buffer)打开。当PHP遇到echo,printf等输出语句时, PHP就会将要输出的数据放入缓冲区(buffer)中,等待输出。而只有当缓冲区满了或者php运行...

    wangjuntytl 评论0 收藏0
  • 【modernPHP专题(10)】理解output buffer

    摘要:磁盘高速缓存操作系统中使用磁盘高速缓存技术来提高磁盘的速度,对高速缓存复制的访问要比原始数据访问更为高效。因此,磁盘高速缓存在逻辑上属于磁盘,物理上则是驻留在内存中的盘块。 1. 磁盘高速缓存(Disk Cache) 操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度,对高速缓存复制的访问要比原始数据访问更为高效。例如,正在运行的进程的指令既存储在磁盘上,也存储在物理内存上,也被复...

    kelvinlee 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<