0

0

php怎么关闭缓冲区

青灯夜游

青灯夜游

发布时间:2021-09-28 19:08:14

|

2891人浏览过

|

来源于php中文网

原创

php关闭缓冲区的方法:1、打开PHP安装目录,找到并打开配置文件“php.ini”;2、在配置文件中,找到“output_buffering”项,将该项的值设置为“Off”即可。

php怎么关闭缓冲区

本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑

PHP 缓冲区(buffer)

脚本输出信息首先放入buffer,只有当buffer满了或者脚本运行完毕,数据才会往下一阶段转移。在配置文件php.ini可以找到output_buffering设置项,我的默认配置(Windows/XAMPP v3.2.2)是4096

1.png

立即学习PHP免费学习笔记(深入)”;

若设置成On,缓冲区可用且无大小限制;

若设置为Off,缓冲区不可用;

若设置为整数,缓冲区可用且为设置大小,单位字节

需要注意的是,ini_set无法设置buffer大小,在初始化脚本运行环境时,已经做好了buffer的定义;cli模式下始终默认output_buffering为Off。

那么问题来了,缓冲区关闭和打开有什么区别?缓冲区初始设置的大小有什么作用?cli模式默认关闭若业务需要能开启吗?缓存区存在有什么好处?

1.      缓冲区关闭和打开有什么区别?

通过代码检验

output_buffering配置为4096时,运行代码

输出结果:在等待3秒钟后,同时输出了start和end

Output_buffering配置为Off时,运行相同代码

输出结果:先输出了start,等待3秒钟后,输出了end

单一看结果一模一样啊~但是观察其运行过程发现了很惊讶的不同点。若缓冲关闭,先输出“start”,等待3秒后再输出“end”。而缓冲开启,会等待脚本执行完成,一并输出结果

这个例子中,flush用于刷新apache的缓冲区,类似让PHP buffer与浏览器建立直接联系,好让我们的注意力能够专注PHP buffer本身。

通过一个形象的例子比喻,PHP的缓冲区像一个大房子,每次echo等输出函数执行时,将数据扔到这个大房子里,直到脚本执行完成或执行ob_flush函数,将数据从大房子中释放,扔给了WebServer缓冲区。关闭了PHP缓冲区后,echo函数执行,没有大房子可以放怎么办呢,就只好直接交给WebServer缓冲区了。

通过例子和代码执行结果,我们能够明白,所谓PHP buffer,是PHP本身开辟的数据存储中枢站,一系列的ob函数都是为此操作。(举几个例子函数)

ob_clean();            //删除内部缓冲区的内容,不关闭缓冲区(不输出)。

ob_end_clean();        //删除内部缓冲区的内容,关闭缓冲区(不输出)。

ob_get_contents();     //返回缓冲区的内容,不输出

ob_get_length();       //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回FALSE。

2.      缓冲区初始设置的大小有什么作用?

将output_buffering从4096改为5,方便执行测试

执行代码

Pic Copilot
Pic Copilot

AI时代的顶级电商设计师,轻松打造爆款产品图片

下载

输出说明:等待3秒后,输出1234end

执行代码

输出说明:输出12345,等待3秒后,输出end

通过输出的比较,很能说明区别了。

缓冲区只能放5字节的数据,放进来的小于这个最大值,还能先存存放放,要是大于等于临界值,那就只好将数据踢出去了,这就跟我们手动执行了ob_flush函数一个效果。

3.      cli模式默认关闭若业务需要能开启吗?

这个问题可以做个补充,非cli模式下,如果php.ini设置缓冲区关闭,但是业务需要用到buffer,咋整呢,难不成还要去改配置。当然不会那么难搞了,这时候又一个ob函数来了,

ob_start();            //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面。

知道了PHP buffer类似数据临时存储区的概念,回过头再来看看TP5源码。

先看看ob_get_level和ob_get_clean函数解释

ob_get_level() :返回输出缓冲机制的嵌套级别。

ob_get_clean():得到当前缓冲区的内容并删除当前输出缓冲区。

从代码中也能得知一二,若level获取大于0,获取缓冲区的内容并删除缓冲区,再通过ob_start打开一个新的,这也很符合注释里说明的“重新申请”。

这里解释下所谓的嵌套,至于level的值啥时候会为0,并且非0的话是什么呢,请将php.ini output_buffering关闭,输出看看结果。另外多次ob_start,多次ob_get_level,来试试对比输出结果吧。

先来看看两种模型


在多次ob_start打开新的缓冲区时,数据结构的构造为第二种,这就是嵌套了。ob_get_level返回了嵌套的级别。

个人理解,嵌套可以套用Java的流机制来类比,一个缓冲区的数据输出到下一个缓冲区,然后可以对数据做定制化的操作。

现在看TP5源码,思路就比较清晰了。如果系统初始化了缓冲区,因为大小可能会有限制,所以先删除再重新打开。而执行ob_start打开的缓存区,它的大小“足够大”,但是到底有多大,暂时没有查到具体的说明,只知道,不管写入数据多大,都会直到脚本结束才会发送

4.      缓存区存在有什么好处?

PHP输出数据发送到WebServer,若echo执行一次发送一次,这加大了资源消耗,不如存储在内存中,统一发送更有效率。

Web请求包含HTTP头部,头部在设置之前不能有任何的输出。PHP缓冲区替我们做好了这步工作,在头部发送前输出各种数据,缓冲区会先将头部信息发送到WebSever,再统一发送数据报文。

推荐学习:《PHP视频教程

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

0

2026.01.15

公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

2

2026.01.15

公务员调剂条件 2026调剂公告时间
公务员调剂条件 2026调剂公告时间

(一)符合拟调剂职位所要求的资格条件。 (二)公共科目笔试成绩同时达到拟调剂职位和原报考职位的合格分数线,且考试类别相同。 拟调剂职位设置了专业科目笔试条件的,专业科目笔试成绩还须同时达到合格分数线,且考试类别相同。 (三)未进入原报考职位面试人员名单。

10

2026.01.15

国考成绩查询入口 国考分数公布时间2026
国考成绩查询入口 国考分数公布时间2026

笔试成绩查询入口已开通,考生可登录国家公务员局中央机关及其直属机构2026年度考试录用公务员专题网站http://bm.scs.gov.cn/pp/gkweb/core/web/ui/business/examResult/written_result.html,查询笔试成绩和合格分数线,点击“笔试成绩查询”按钮,凭借身份证及准考证进行查询。

2

2026.01.15

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

63

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

32

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

73

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

20

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

25

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号