php关闭缓冲区的方法:1、打开PHP安装目录,找到并打开配置文件“php.ini”;2、在配置文件中,找到“output_buffering”项,将该项的值设置为“Off”即可。
本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑
PHP 缓冲区(buffer)
脚本输出信息首先放入buffer,只有当buffer满了或者脚本运行完毕,数据才会往下一阶段转移。在配置文件php.ini可以找到output_buffering
设置项,我的默认配置(Windows/XAMPP v3.2.2)是4096
若设置成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. 缓冲区初始设置的大小有什么作用?
来源gao.dai.ma.com搞@代*码网将output_buffering从4096改为5,方便执行测试
执行代码
输出说明:等待3秒后,输出1234end
执行代码
输出说明:输出12345,等待3秒后,输出end
通过输出的比较,很能说明区别了。
缓冲区只能放5字节的数据,放进来的小于这个最大值,还能先存存放放,要是大于等于临界值,那就只好将数据踢出去了,这就跟我们手动执行了ob_flush函数一个效果。