php flush nginx,Nginx+phpfastcgi下flush输出问题
最近由于业务需要,需要使用php的flush输出缓存刷新,处理浏览器超时问题.
最初的测试代码如下:
ob_start();//打开缓冲区
for ($i=10; $i>0; $i--)
{
echo $i.‘
‘;
ob_flush();
flush();
sleep(1);
}
ob_end_flush();//输出并关闭缓冲
die();
本以为这样就能1秒钟输出一个数字,但是在nginx+php的环境下,实际产生的结果与预期是不一样的,结果是10秒后数据一次性都输出出来了。
以前在apache里运行正常,每隔1秒动态刷新浏览器输出缓存内容,那是因为apache里没有开启gzip。纠结了半天,上网查了许久的问题,最后解决的方法如下:
header("Content-Encoding: none\r\n");
ob_start();//打开缓冲区
for ($i=10; $i>0; $i--)
{
echo str_repeat(" ",1024*64);
echo $i.‘
‘;
ob_flush();
flush();
sleep(1);
}
ob_end_flush();//输出并关闭缓冲
die;
解释下为什么要这么写这段代码:
首先:header("Content-Encoding: none\r\n");解决nginx在配置文件中开启了gzip的问题,如果nginx的gzip的配置项是on,而不加这行代码,结果还是一样等程序执行完毕后一次性的把数据输出出来;其实也可以不用加这行代码,直接在nginx配置文件中关闭gzip,但是不能因为一个小需求而改nginx的配置吧。
其次:echo str_repeat(" ",1024*64)这行代码也是重点,一开始我也没有加这行代码,最后的实现的效果还是一次性的把数据输出出来,造成的原因是nginx中的 fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
这两个配置表示Nginx会缓冲PHP-FPM输出的信息,当达到64k时才会将缓冲区的数据发送给客户端,由于我们只输出了一个数字,远远不到64k这个上限,所以在程序输出之前加上echo str_repeat(" ",1024*64);1024*64值根据个人的nginx配置进行修改。
最后一点:ob_flush()和flush()要结合使用,而且ob_flush要在flush之前,flush才是真正的输出。
php flush nginx,Nginx+phpfastcgi下flush输出问题相关推荐
- nginx反向代理下thinkphp、php获取不到正确的外网ip
nginx反向代理下thinkphp.php获取不到正确的外网ip 在记录用户发送短信需要获取用户ip时,tp一直获取的是内网ip:10.10.10.10 tp框架获取ip方法:get_client_ ...
- cygwin nginx php mysql_Windows 下 Nginx + PHP5 的安装与配置
Nginx 是一个轻量级的高性能 Http WebServer,以事件驱动方式编写,因此相比 Apache 而言,Nginx 更加稳定.性能更好,而且配置简单,资源占用较低.以下是我在 Windows ...
- ubuntu nginx php-fpm mysql_Ubuntu下安装Nginx,PHP5(及PHP-FPM),MySQL
环境:Ubuntu 12.0.4 LTS nginx(发音"engine x")是一个自由,开放源码,高性能的HTTP server.Nginx以稳定性,丰富的功能集,简单的配置, ...
- Nginx之windows下搭建
去nginx.org下载nginx 以nginx-1.8.1为例解压到D盘nginx-1.8.1目录 假设NGINX_HOME为D:\nginx-1.8.1 3种启动途径: 一.双击nginx.exe ...
- nginx在Centos下的安装,转:http://www.linuxidc.com/Linux/2016-09/134907.htm
安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装 安装 nginx 需要 ...
- php alias 报错,PHP(FastCGI)在Nginx的alias下出现404错误的解决方法
本文讲述了PHP(FastCGI)在Nginx的alias下出现404错误的解决方法.分享给大家供大家参考,具体如下: 在Nginx的官方wiki中如下描述 The alias directive c ...
- linux nginx 代理iis,nginx 系列 linux下安装以及配置IIS分发
一. 安装 操作系统:centos 7 ,nginx版本1.12.2,windows server 2008 iis 1.1 确认nginx所依赖的工具 Zlib: nginx提供gzip模块,需要 ...
- linux裸机安装nginx,linux环境下安装nginx步骤 - 进击的乌龟 - 博客园
开始前,请确认gcc g++开发类库是否装好,默认已经安装. ububtu平台编译环境可以使用以下指令 apt- get install build- essential apt - get inst ...
- 通过nginx在window下部署项目
1-安装nginx 首先,进入nginx 的官网,下载nginx,安装nginx 通过,https://nginx.org/ 链接进入 Mainline version:开发版,mainline 目前 ...
最新文章
- 将一个n元一维向量向左旋转i个位置。例如,当n = 8且i = 3时,向量abcdefgh旋转为defghabc
- Googlequot;员工quot;曝内幕:Google员工的17个秘密
- 73.关系操作有哪些?
- sql server 2008安装需要一直重启。但重启后又没有达到效果。
- python学习笔记——文件
- SELinux相关内容
- sqlserver数据库 表中字段值有空格,如何去除空格(例如char (5) 存入数据不足5位时sqlserver会自动补空格)...
- 机器人教练走进驾校_“机器人教练”走进镇江驾校
- 光影魔术手的抠图功能
- linux USB摄像头 V4L2工具调试摄像头
- linux 3 4文件管理ppt,第8单元-Linux系统文件查找与文件管理.ppt
- 什么是互联网产品运营
- 2035年进入现代化交通强国行列
- ubuntu桌面美化
- 2018.12.15【NOIP提高组】模拟B组 jzoj100047. 基因变异
- vi命令下编辑文件时,按insert键文件底部不出现“INSERT”问题
- python不间断爬取微博热搜并存储
- linux终端显示打印记录,Ubuntu使用-记录终端输出的LOG
- Linux下C程序调用库函数实现重启
- 程序员过年被亲戚鄙视:月薪15k 很一般吧?
热门文章
- quartz获取开始结束时间_Springboot集成quartz
- Flask框架项目实例:**租房网站(二)
- python——import导入模
- mupdf java_mupdf库学习
- 阿里P8架构师谈:Docker简介、组成架构、使用步骤、以及生态产品
- OpenKG 祝大家元宵节快乐!
- 开源开放 | 图数据交互可视化分析框架 InteractiveGraph v0.3 版本发布
- 论文浅尝 | 基于用户反馈的交互式自然语言回答系统提升机制
- 征文通知 | 2018年全国知识图谱与语义计算大会
- Selenium爬虫