最近由于业务需要,需要使用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输出问题相关推荐

  1. nginx反向代理下thinkphp、php获取不到正确的外网ip

    nginx反向代理下thinkphp.php获取不到正确的外网ip 在记录用户发送短信需要获取用户ip时,tp一直获取的是内网ip:10.10.10.10 tp框架获取ip方法:get_client_ ...

  2. cygwin nginx php mysql_Windows 下 Nginx + PHP5 的安装与配置

    Nginx 是一个轻量级的高性能 Http WebServer,以事件驱动方式编写,因此相比 Apache 而言,Nginx 更加稳定.性能更好,而且配置简单,资源占用较低.以下是我在 Windows ...

  3. ubuntu nginx php-fpm mysql_Ubuntu下安装Nginx,PHP5(及PHP-FPM),MySQL

    环境:Ubuntu 12.0.4 LTS nginx(发音"engine x")是一个自由,开放源码,高性能的HTTP server.Nginx以稳定性,丰富的功能集,简单的配置, ...

  4. Nginx之windows下搭建

    去nginx.org下载nginx 以nginx-1.8.1为例解压到D盘nginx-1.8.1目录 假设NGINX_HOME为D:\nginx-1.8.1 3种启动途径: 一.双击nginx.exe ...

  5. nginx在Centos下的安装,转:http://www.linuxidc.com/Linux/2016-09/134907.htm

    安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装 安装 nginx 需要 ...

  6. php alias 报错,PHP(FastCGI)在Nginx的alias下出现404错误的解决方法

    本文讲述了PHP(FastCGI)在Nginx的alias下出现404错误的解决方法.分享给大家供大家参考,具体如下: 在Nginx的官方wiki中如下描述 The alias directive c ...

  7. linux nginx 代理iis,nginx 系列 linux下安装以及配置IIS分发

    一. 安装 操作系统:centos 7 ,nginx版本1.12.2,windows server 2008 iis 1.1 确认nginx所依赖的工具 Zlib:  nginx提供gzip模块,需要 ...

  8. linux裸机安装nginx,linux环境下安装nginx步骤 - 进击的乌龟 - 博客园

    开始前,请确认gcc g++开发类库是否装好,默认已经安装. ububtu平台编译环境可以使用以下指令 apt- get install build- essential apt - get inst ...

  9. 通过nginx在window下部署项目

    1-安装nginx 首先,进入nginx 的官网,下载nginx,安装nginx 通过,https://nginx.org/ 链接进入 Mainline version:开发版,mainline 目前 ...

最新文章

  1. 将一个n元一维向量向左旋转i个位置。例如,当n = 8且i = 3时,向量abcdefgh旋转为defghabc
  2. Googlequot;员工quot;曝内幕:Google员工的17个秘密
  3. 73.关系操作有哪些?
  4. sql server 2008安装需要一直重启。但重启后又没有达到效果。
  5. python学习笔记——文件
  6. SELinux相关内容
  7. sqlserver数据库 表中字段值有空格,如何去除空格(例如char (5) 存入数据不足5位时sqlserver会自动补空格)...
  8. 机器人教练走进驾校_“机器人教练”走进镇江驾校
  9. 光影魔术手的抠图功能
  10. linux USB摄像头 V4L2工具调试摄像头
  11. linux 3 4文件管理ppt,第8单元-Linux系统文件查找与文件管理.ppt
  12. 什么是互联网产品运营
  13. 2035年进入现代化交通强国行列
  14. ubuntu桌面美化
  15. 2018.12.15【NOIP提高组】模拟B组 jzoj100047. 基因变异
  16. vi命令下编辑文件时,按insert键文件底部不出现“INSERT”问题
  17. python不间断爬取微博热搜并存储
  18. linux终端显示打印记录,Ubuntu使用-记录终端输出的LOG
  19. Linux下C程序调用库函数实现重启
  20. 程序员过年被亲戚鄙视:月薪15k 很一般吧?

热门文章

  1. quartz获取开始结束时间_Springboot集成quartz
  2. Flask框架项目实例:**租房网站(二)
  3. python——import导入模
  4. mupdf java_mupdf库学习
  5. 阿里P8架构师谈:Docker简介、组成架构、使用步骤、以及生态产品
  6. OpenKG 祝大家元宵节快乐!
  7. 开源开放 | 图数据交互可视化分析框架 InteractiveGraph v0.3 版本发布
  8. 论文浅尝 | 基于用户反馈的交互式自然语言回答系统提升机制
  9. 征文通知 | 2018年全国知识图谱与语义计算大会
  10. Selenium爬虫