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经验文章,请参考:

