php缓存,如何理解flush()函数?flush函数如何生效
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文对上一篇文章中分段输出内容的情况进行进一步分析,分析的主要焦点在于代码中flush()
函数。从运行效果上来看,flush()
代码执行与否,最终的效果都是会分段输出。那么,flush()
究竟作用是什么呢?本文做个非常简单的分析。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。测试环境:win10
,php-cgi@8.2.11nts
,chrome@120.0.6099.201
。
测试环境
本文是基于下面这篇文章进行扩展描述的。需求就是分段输出,服务的启动方式就是纯php
后端,不掺杂nginx
任何事情。php.ini
中的设置就是output_buffering
。参考文章:
本文的测试环境里面,写了两个不同的php.ini
,区别就在于:
php.ini
中output_buffering
为off
,也就是关闭系统缓存。php2.ini
中output_buffering
为1024
,打开系统缓存区,设置为1024
字节。
利用php
的-c
参数设置不同的端口对应不同的php.ini
,从而创造两个不同环境。
cd <php_path>
php -S localhost:<port> -c <php_path>\php.ini -t <www_path>
测试代码
测试代码也有两个,区别在于是不是启用了flush()
。test.php
:
echo "output_buffering:",ini_get("output_buffering"), "<br/>";
flush();
sleep(3);
echo date("i:s",time()), PHP_EOL;
flush();
sleep(3);
test2.php
:
echo "output_buffering:",ini_get("output_buffering"), "<br/>";
// flush();
sleep(3);
echo date("i:s",time()), PHP_EOL;
// flush();
sleep(3);
flush()效果1
在没有开启output_buffering
的时候,测试代码的效果上来看,带不带flush()
暂时没有区别。(或者说区别细微到看不出来),都是期待中的分段输出。
output_buffering = off
flush()效果2
在开启了output_buffering
的时候,无论是否使用flush()
,分段输出效果都不存在了。(待后续讨论)
output_buffering = 1024
并且,带不带flush()
有着比较明显的区别。区别在于:
- 带
flush()
的时候,页面多次刷新过程中,有空白的过程。浏览器的转圈图标是正向的。(意味着等待服务器输出持续了较长时间) - 不带
flush()
的话,页面多次刷新过程中,没有空白的过程。浏览器的转圈图标是逆向的。(意味着一直等待服务器输出)
苏南大叔的理解是:flush()
的过程中,由于数据被output_buffering
给缓存了,所以刷了空白数据出来。
结语
本文仅仅是对php
的自带缓存的一小小点的探索而已。更多php
经验文章,请参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。