buffer其实就是缓冲区,一个内存地址空间,只要用于存储数据区域。

<?php
echo 1;

运行这段代码,浏览器会显示1,其实中间会经历一个buffer(数据1先到buffer,当buffer满了,再将数据传到客户端(浏览器))

内容 -> php buffer -> tcp -> 客户端(浏览器)

php.ini    output_buffering = on #默认打开缓冲区

这里需要注意的是:
1)使用ini_set是无法修改buffer的设置。
2)不管php.ini中output_buffering设置,cli模式下的php始终默认是output buffering为关闭的。但是你可以通过ob_start()将buffer打开。
大家都说:ob_start()是将php buffer打开,ob_end_flush()是将php buffer关闭。ob_start()手动激活php output_buffering机制,使得即便输出超过了4kb数据,也不把数据交给tcp传给浏览器,因为ob_start()将php buffer空间设置到了足够大 。只有直到脚本结束,或者调用ob_end_flush函数,才会把数据发送给客户端浏览器。需要注意的是php.ini中php buffer是关闭的,再次调用ob_end_flush()会报warning。

缓冲区相关函数

ob_start() - 打开输出控制缓冲
ob_get_length() - 返回输出缓冲区的长度
ob_get_level() - 返回输出缓冲区的嵌套级别
ob_get_status() - 返回输出缓冲区的状态(数组形式返回,默认返回最顶层,参数为true时返回所有)
ob_get_contents() - 返回输出缓冲区的内容
ob_get_clean() - 以字符串格式返回当前输出缓冲区并关闭输出缓冲
ob_end_clean() - 清空(擦除)缓冲区并关闭输出缓冲
ob_get_flush() - 以字符串返回输出缓冲区内容并关闭缓冲
ob_end_flush() - 冲刷出(送出)输出缓冲区内容缓冲并关闭输出缓冲

ob_end_flush()与ob_end_clean()区别

  • 这两个函数都会关闭输出缓冲。

  • 不同的是,ob_end_flush()只是把PHP缓冲区中的数据发送到客户端浏览器,而ob_clean_clean()将PHP缓冲区中的数据删除,但不发送给客户端。ob_end_flush()调用之后,PHP缓冲区中的数据依然存在,ob_get_contents()依然可以获取PHP缓冲区中的数据拷贝。

PHP中buffer的认知的更多相关文章

  1. linux free命令中buffer与cache的区别

    linux free命令中buffer与cache的区别 2012-05-15      个评论       收藏    我要投稿 linux free命令中buffer与cache的区别   ~$ ...

  2. NIO编程中buffer对象的理解以及API的使用

    概念讲解,转自https://www.cnblogs.com/lxzh/archive/2013/05/10/3071680.html  ,将的非常好! Buffer 类是 java.nio 的构造基 ...

  3. NIO中Buffer的重要属性关系解析

    Buffer 是java NIO中三个核心概念之一 缓存, 在java的实现体系中Buffer作为顶级抽象类存在 简单说,Buffer在做什么? 我们知道,在java IO中体系中, 因为InputS ...

  4. 计算机中buffer和cache的理解

    Linux中Buffer和Cache的区别 Cache 和 Buffer的区别 作者:知乎用户链接:https://www.zhihu.com/question/26190832/answer/323 ...

  5. node.js中buffer需要知道的一些点

    本文为阅读朴灵大大的<深入浅出node.js>笔记: 在前端开发的时候,我们不曾用过buffer,也没得用.buffer是node环境引入的,用来方便应对二进制数据的处理.这里我们对它应该 ...

  6. Linux中Buffer和Cache的区别

    1. Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而  Cache保存着CPU刚 ...

  7. node.js中Buffer缓冲器的使用

    一.什么是Buffer Buffer缓冲器是用来存储输入和输出数据的一段内存.js语言没有二进制数据类型,在处理TCP和文件流的时候,就不是很方便了. 所以node.js提供了Buffer类来处理二进 ...

  8. NodeJS中Buffer模块详解

    一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...

  9. Linux中buffer/cache,swap,虚拟内存和page ++

    1.Buffer 和 cache Free 命令相对于top 提供了更简洁的查看系统内存使用情况: [apptest@vs022 ~]$ free -m               ——以MB为单位  ...

随机推荐

  1. Nginx+Tomcat整合的安装与配置(win.linux)

    //原帖 http://zyjustin9.iteye.com/blog/2017394 上面是windows系统,linux直接下拉到分割线. 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食 ...

  2. spring boot maven META-INF/MAINIFEST.MF

    unzip -p charles.jar META-INF/MANIFEST.MF https://blog.csdn.net/isea533/article/details/50278205 htt ...

  3. intellij idea 的全局搜索快捷键方法

    1.Ctrl+N按名字搜索类 相当于eclipse的ctrl+shift+R,输入类名可以定位到这个类文件,就像idea在其它的搜索部分的表现一样,搜索类名也能对你所要搜索的内容多个部分进行匹配,而且 ...

  4. tensorboard使用过程错误记录

    首先代码如下: def word_vis(self,file,txtname):#生成的模型存放的地址:word_vismodel'+file为新建的文件夹名 txtname是通过word2vec生成 ...

  5. 小程序map组件默认层级最高,并且不能设置的解决方案

    map组件默认在最上面,若要设置像ofo那样的按钮有两个方法,一是用控件设置,控件就是controls属性,控件只能显示图片,不能显示文字之类的.二是用cover-view组件,这个组件就是悬浮在一些 ...

  6. python进阶(一) 多进程并发机制

    python多进程并发机制: 这里使用了multprocessing.Pool进程池,来动态增加进程 #coding=utf-8 from multiprocessing import Pool im ...

  7. 让sublime可以和visual studio一样自动在运算符前后添加空格的插件

    用过vs的人都知道,vs会自动在代码中运算符的前后加空格,比如 i=1; 换行后会自动变成i = 1; 开始觉得这个挺烦的,后来习惯了,发现这个功能还是挺好的,然代码更清晰. 最近换了sublimet ...

  8. java项目打包成可运行的jar,main方法带参数

    转载 原文地址:http://www.cnblogs.com/neillee/p/6063808.html#commentform 将 java 项目打包成可运行的 jar 包(main 函数带参数) ...

  9. js中获取当天的时间的年月日

    var d=new Date() var day=d.getDate() var month=d.getMonth() + 1 var year=d.getFullYear() document.wr ...

  10. 笔记02 linux的一些命令sed

    #!/bin/bash # dataformat=`date +%Y-%m-%d-%H-%M` #进行文件件cp并重命名 nginx_home=/opt/modules/nginx-1.12/ cp ...