PHP flush 函数使用注意事项


Posted in PHP onAugust 26, 2016

ob_*系列函数, 是操作PHP本身的输出缓冲区.

所以, ob_flush是刷新PHP自身的缓冲区.

而flush, 严格来讲, 这个只有在PHP做为apache的Module(handler或者filter)安装的时候, 才有实际作用.
它是刷新WebServer(可以认为特指apache)的缓冲区.

在apache module的sapi下, flush会通过调用sapi_module的flush成员函数指针,
间接的调用apache的api: ap_rflush刷新apache的输出缓冲区, 当然手册中也说了, 有一些apache的其他模块,
可能会改变这个动作的结果..

有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。

甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape浏览器会在接受到换行或 html标记的开头之前缓存内容,并且在接受到 标记之前,不会显示出整个表格。

一些版本的 Microsoft Internet Explorer
只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。

所以, 正确使用俩者的顺序是. 先ob_flush, 然后flush,

当然, 在其他sapi下, 不调用flush也可以, 只不过为了保证你代码的可移植性, 建议配套使用.

<?php
// set_time_limit(0);
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
// ob_end_flush();
// ini_set('output_buffering', 0);
// ini_set('implicit_flush', 1);
if (ob_get_level() == 0) ob_start();
echo str_repeat(' ' ,4096);
$long = 60;
while($long > 0)
{
$time = date('r');
echo "data: The server time is: {$time}\n\n";
ob_flush();
flush();//break;
sleep(1);
$long --;
}
// var source=new EventSource("http://localhost:18000/sse.php");source.onmessage=function(event){console.info(event.data)};
?>

如果要在 nginx + fpm + php 上支持需要加一个响应头

header('X-Accel-Buffering: no');
This eliminates both proxy_buffering and (if you have nginx >= 1.5.6), fastcgi_buffering. The fastcgi bit is crucial if you're using php-fpm. The header is also far more convenient to do on an as-needed basis.
Docs on X-Accel-Buffering http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffering ;

<?php
// set_time_limit(0);
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('X-Accel-Buffering: no');

// ob_end_flush();
// ini_set('output_buffering', 0);
// ini_set('implicit_flush', 1);

// if (ob_get_level() == 0) ob_start();
// echo str_repeat(' ' ,4096);

$long = 60;
while($long > 0)
{
	$time = date('r');
	echo "data: The server time is: {$time}\n\n";
	ob_flush();
	
	flush();//break;
	sleep(1);
	$long --;
}
// var source=new EventSource("http://localhost:18000/sse.php");source.onmessage=function(event){console.info(event.data)};
?>
PHP 相关文章推荐
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
MySQL的FIND_IN_SET函数使用方法分享
Mar 27 PHP
PHP垃圾回收机制引用计数器概念分析
Jun 24 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
PHP实现递归无限级分类
Oct 22 PHP
微信支付开发订单查询实例
Jul 12 PHP
php封装的验证码类分享
Feb 26 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
Dec 12 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 #PHP
简单的pgsql pdo php操作类实现代码
Aug 25 #PHP
php mongodb操作类 带几个简单的例子
Aug 25 #PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 #PHP
php 的反射详解及示例代码
Aug 25 #PHP
php 输入输出流详解及示例代码
Aug 25 #PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 #PHP
You might like
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
PHP 快速排序算法详解
2014/11/10 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
为Extjs加加速(javascript加速)
2010/08/19 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
浅谈对yield的初步理解
2017/05/29 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
Python实现京东抢秒杀功能
2021/01/25 Python
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
银行自荐信范文
2013/10/07 职场文书
称象教学反思
2014/02/03 职场文书
模具设计与制造专业推荐信
2014/02/16 职场文书
交通文明倡议书
2014/05/16 职场文书
初中教师个人总结
2015/02/10 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记