php如何修改缓存设置?做到内容及时分步输出?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
故事是这样的,苏南大叔要使用php
输出一些文字内容。但是,目标并不在于“输出”,而是在于小批量分段输出,重点就是【分步】。那么,正常情况下,这个需求的实现,有很多不同层次上的障碍,这些障碍都源自于“缓存”。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。本文测试环境:php-cgi@8.2.11nts
,chrome@120.0.6099.201
。
不同层次缓存
因为正常情况下,是使用nginx
和php
来进行组合的。php
层面上有缓存,nginx
层面上也有缓存。为了更好的说明问题,本文的测试环境,仅仅使用php
,不使用nginx
或者apache
。这样就可以把出问题的情况缩小到php
和浏览器之间了。
使用的命令是:
php -S localhost:8000 -c php.ini
这里指定php.ini
的原因是:要对php.ini
的配置进行修改。而默认不传递-c
参数的话,无法修改配置。参考文章:
php.ini中的buffer
对于php
来说,自身是有缓存设置的,代码输出超过一定的值后,才会输出。体现在php.ini
中的设置是output_buffering
。其参考值如下:
基本情况 | 值 |
---|---|
Default Value | Off |
Development Value | 4096 |
Production Value | 4096 |
4096字节 = 4kb。
官方文档:
在本文中,就直接设置如下即可:
output_buffering = off
测试代码
echo ini_get("output_buffering");
echo "<br/>";
echo "分步输出第一步";
flush();
sleep(2);
echo "第二步";
flush();
sleep(2);
echo "第三步";
flush();
目标是每隔2秒输出“第x步”三个字。如果不是分步输出的话,可以注意检查:
output_buffering
的输出值是什么,目标数据是0
,也就是说关闭php
系统的output_buffering
选项。- 代码中的
flush()
是个关键点,关于这个代码的用法,待后续文章补充。 - 注意本例子里面只有
php
,没有nginx
的参与。
结语
苏南大叔的更多php
经验文章,请参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。