首页 脚本专栏 正文

output_buffering PHP输出缓冲控制介绍

PHP输出缓冲控制介绍

PHP输出缓冲控制可以解决程序先输出数据,后输出头部信息的问题。比如,下面的程序

未打开缓冲区之前的程序

在不打开缓冲区的情况下会报出如下警告:

因为header()函数会发送一段头信息给浏览器,而在给浏览器发送头信息之前不能有任何输出的,否则就会出现上面的警告!

现在我们将缓冲区打开:

先打开缓冲区再做输出

再次执行程序,结果如下:

这时候我们看到成功跳转到了index.php,不再输出警告信息了。因为我们打开了缓冲区,Hello World!会在程序结束之后才输出给浏览器,所以不会报警告信息。

我们可以通过ob_start()函数来打开缓冲区。php.ini文件中有一个配置缓冲区打开和关闭的配置项:

因为该选项默认是关闭的,所以我们需要通过ob_start来手动开启缓冲区,如果选项配置为output_buffering = On,那么我们就不需要ob_start()啦!

ob_前缀的输出控制函数常用的还有flush()、ob_get_contents()、ob_get_length()、ob_end_flush()、ob_end_clean()等几个。

flush()函数输出当前缓冲区的内容。

ob_get_contents()函数获取当前缓冲区的内容。

ob_get_length()函数获取当前缓冲区内容的长度。

ob_end_flush()函数输出并结束当前缓冲区。

ob_end_clean()清除并结束当前缓冲区。

以上就是PHP输出控制的简单介绍。

PHP输入输出控制函数之flush和ob_flush

PHP输入输出控制函数是PHP初学者必须要掌握的一个知识点,很多人刚开始的时候都分不清到底flush和ob_flush有什么区别?为什么PHP要提供两个将缓冲区的内容输出的函数?许多人都建议,不管你理解不理解,都要两个一起调用,同时是要按这样的顺序一起调用。

ob_flush();

flush();

结合官方文档和相关资料,ob_flush是发送用户(程序员)自定义的缓冲内的内容数据,而flush则是发送php自身的缓冲区的内容数据。这应该是最重要最大的区别了。不管你知道不知道,注意没注意,你可能在代码中调用了多次ob_start函数,其实这已经创建了多个输出缓冲区,这些缓冲区构成了一个缓冲区堆栈,最新创建的缓冲区就是当前缓冲区。每调用一次ob_flush就会将当前缓冲区的内容输出到上一层缓冲区,依次类推。最后才回到php缓冲区。所以上面的代码说要按顺序来调用,不然可能出现意想不到的结果。你可以简单理解成ob_flush 将缓冲内容发送到flush,而flush将缓冲内容发给客户端(浏览器),尽管实际上情况可能要比这复杂多了。

此外,ob_flush还受到php的配置选项output_buffering(默认是4069字符)的影响,如果缓冲区的内容没达到这个阀值,调用了ob_flush也没作用。而flush则不受此限制。另外这两个函数都不能影响到客户端浏览器的缓存,也不能影响到web服务器自身的缓存机制。

以上如有谬误,欢迎指正!

相关问答

buffers的意思_作业帮

[回答]后来过渡到配置各种实验步骤使用的缓冲液和母液(储存液).TLBs:TranslateLooksideBuffers翻译旁视缓冲器Therearenofreeoutputbuffers...

ob空间是什么意思?

ob=outputbuffer输出缓冲缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,...

在上海,想培训一下JAVA多少钱?

古人云:“读书破万卷,下笔如有神”。也就是说,只有大量的阅读,写作的时候才能风生水起——写作意味着输出(我的知识传播给他人),而读书意味着输入(从他人...");...

流是什么意思?

Java中的流是个抽象的概念,当程序需要从某个数据源读入数据的时候,就会开启一个数据流,数据源可以是文件、内存或网络等等。相反地,需要写出数据到某个数据源...

【常用英文缩写大全】作业帮

[回答]1.AAA:1).AmericanAccountingAssociation美国会计协会2).AmericanAdvertisingAssociation美国广告协会3).Ame...

Java面试题目网站有哪些?

关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大。这里整理挑选出来供大家面...

什么是时钟树?

时钟树,是个由许多缓冲单元(buffercell)平衡搭建的网状结构,它有一个源点,一般是时钟输入端(clockinputport),也有可能是design内部某一个单元输出脚(cell...

英语翻译中央处理器(CPU,CentralProcessingUnit)是一块超大...

[回答]CPUisasuper-large-scaleIC.Itisthecoreofbothcomputingandcontrolling.Itconsistsofmainly...

如何将top命令查看cpu以及内存使用率,屏幕上的信息转为文件保存?

top-b-n1>output.log```参数说明:-`-b`:以批处理模式运行`top`命令,这样它将输出一次并退出。-`-n1`:表示仅运行一次`top`命令。-...

国内真正的大数据采集产品有哪些?

1、ApacheFlume官网:https://flume.apache.org/Flume是Apache旗下的一款开源、高可靠、高扩展、容易管理、支持客户扩展的数据采集系统。Flume使用...