找回密码
 注册账号

QQ登录

只需一步,快速开始

《泰拉瑞亚下载-1.4.2.3版》 泰拉瑞亚服务器 - MOD模组下载

入驻泰拉战网 新手指引 - 升级 - 师徒

泰拉瑞亚合成表 泰拉卡牌 - 泰拉江湖 - 泰拉刺客

联系泰拉开发组👈进入 积分市场 - 房产交易 - 水晶获取

查看: 2209|回复: 0

[原生PHP] PHP flush()刷新不能输出缓冲的原因分析

[复制链接]
褐袍巫师
法师

2052

主题

2411

回帖

2472

广播

技术小组

积分
16248
泰拉
6091
水晶
15179
铜钥匙
511
银钥匙
3
金钥匙
18

【江湖新秀】【基友证明】【水贴恶魔】【高朋满座】【论坛蘑菇党】【我是小土豪】【宝剑回鞘】【伪娘证书】【超级玛丽】【泰拉达人】【文艺青年证】【社区最高荣誉勋章】【奥运选手】【我很囧证】【宠物·缘定三生】【发帖机器】【潜水高手】【我很萌证】【动漫迷】【有头有脸】【视频爱好者】【萝莉控】【香水有毒】【朋友控】【我素软妹纸】【我是巫婆】【我是公主】【我很聪明证】【新官上任三把火】

QQ
发表于 2020-1-26 01:50:56 | 显示全部楼层 |阅读模式
在php程序编写中,flush()的使用率还是挺高的,它在网页表现即时信息效果时发挥了极为重要的作用
flush() 是进度条实现代码里的关键语句。
关于flash()的解释
语法:
flush();
作用:
刷新PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。
问题:
flush()刷新为什么不能输出缓冲?
很简单的程序代码
  • for ($i=10; $i>2; $i--)
  • {
  •     echo $i.'<br />';
  •     flush();
  •     sleep(1);
  • }

其运行结果应该是从10到3,依次输出到浏览器里,效果图如下:

                               
登录/注册后可看大图
上述代码,如果没有flush();这句,则10到3的数字会一起输出到浏览器。
然而就是上述的代码,我在本地测试成功,但是上传到空间里后却无效了,这是怎么回事?
后来我查了相关的资料,发现flush();的使用还需要注意一些问题,这些问题可能在我们没有遇到的时候我们是不会去想到的。那就是flush()需要与ob_flush()配合着使用,否则在linux系统里不会输出缓冲。
而flush()与ob_flush()配合着使用的同时,写法上也需要讲究,那就是先写ob_flush();再写flush();,如下:
  • ob_flush();
  • flush();

好了,问题的症状就在这里,于是,上述代码就应该写成如下所示:
  • for ($i=10; $i>2; $i--)
  • {
  •     echo $i.'<br />';
  •     ob_flush(); //此句不能少
  •     flush();
  •     sleep(1);
  • }
  • ob_end_flush();

这样,无论是在哪个系统,哪个web服务器,都可以正常的输出缓冲了。

获得 花仙子卡 一张

卡片说明:墨裔 遇到 [斯文的小言] 被赠与 1 铜钥匙.

卡片效果:获得 1 铜钥匙

每天签到都被打劫

泰拉宝石
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|友链申请|Archiver|手机版|小黑屋|游芯沙盒 ( 陕ICP备11006283号-1 )

GMT+8, 2024-5-20 01:58 , Processed in 0.111304 second(s), 40 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表