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才是真正的输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数知识点总结_线性代数导读+笔记

一些学习线性代数的心得和资源分享,供大家参考。资源Introduction to Linear Algebra, 5th Edition​math.mit.edu学线性代数主要的参考书,Strang 教授也算是网红了,讲课讲得十分浅显易懂,网上有配套的video,强烈推荐。…

5G通信网络专题报告:新一轮移动通信网络建设迎来高潮

报告来源:山西证券1. 移动通信网络概述1.1 移动通信网络行业界定异地间人与人、人与物、物与物进行信息的传递和交换称为通信。通信以获取信息为目的,实现信息传输所需的一切设备和传输媒介构成通信系统,通信系统大体包括终端和通信网络两部分…

Oracle 通过字段名查询其所在的表

select owner , table_name , column_name from dba_tab_columns where column_nameLOG_TYPE ;转载于:https://www.cnblogs.com/linnuo/p/6812339.html

python标准库 下载_下载python标准库--python

1 #coding:utf-82 importurllib23 importos,sys4 from BeautifulSoup import BeautifulSoup #For processing HTML5 from bs4 importBeautifulSoup6 classBookSave():7 8 dir:html文件保存目录 url:index.html目录 static_url:js、css所在目录的上级目录9 distingui…

马赛克战——利用人工智能和自主系统来实施决策中心作战

知远战略与防务研究所 沐俭/编译自:美国战略与预算评估中心网站【知远导读】本篇推送编辑节选自美国战略与预算评估中心2020年2月11日发布的同名研究报告,报告由CSBA高级研究员布莱恩克拉克等撰写。报告认为,美军目前这种以一体化、多功能集…

java动态内存分部,如何利用Java实现动态内存分配?

一.实验原理原理:内存以分区为单位,每个分区可由(ID,addr,size,)进行描述class sector{int id -1;//记录作业的编号int addr0;//内存的起始位置int size100;//分配的内存大小}建立两个链表avail和busy。av…

codevs 1283 等差子序列

http://codevs.cn/problem/1283/ 题目描述 Description给一个 1 到 N 的排列{Ai}&#xff0c;询问是否存在 1<p1<p2<p3<p4<p5<…<pLen<N&#xff08;Len>3&#xff09;&#xff0c;使得 Ap1,Ap2,Ap3,…ApLen 是一个等差序列。 输入描述 Input Descr…

postgresql两个列模糊比较_JDBC进阶(一):批处理与获取自增长列的值

一、批处理假如要插入一万条记录到数据表中&#xff0c;那么使用普通的方法就要执行一万次插入操作&#xff0c;这样会频繁打开和关闭数据库连接&#xff0c;导致执行速度变慢。因此可以使用批处理机制将多条语句一次性提交给数据库批量处理。批处理的相关API&#xff1a;void …

深度解读后疫情时代下,零售行业的趋势及技术前瞻

来源&#xff1a;苏宁零售技术研究院作者&#xff1a;王俊杰、罗海棠博士、郭永慧、池曙强、张绿漪博士新冠状病毒肺炎疫情发展严峻&#xff0c;短时间内席卷全国。民众在政府的号召下选择了尽量不出行&#xff0c;餐饮、旅游、线下零售等行业面临严峻考验。但同时&#xff0c;…

php 两个数组中不同的元素,PHP实现查询两个数组中不同元素的方法

这篇文章主要介绍了PHP实现查询两个数组中不同元素的方法,涉及PHP数组差集运算与数组合并的相关技巧,需要的朋友可以参考下本文实例讲述了PHP实现查询两个数组中不同元素的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;<?php $a array("max_allow_dia…

JAVA-配置path环境

配置path环境变量变的目的是什么&#xff1f; 控制台可以在任意的路径下都可以找到java的开发工具。 为了说明几个JDK环境变量的作用&#xff0c;这里先给出环境变量的定义 环境变量&#xff1a; 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数&#xff0c;比…

c井语言python_【一点资讯】C井风靡一时的编程语言和现在最火编程语言Python!谁更强? www.yidianzixun.com...

步入正题&#xff1a; 欢迎提出更简单或者效率更高的方法基础系列&#xff1a;(这边重点说说Python&#xff0c;上次讲过的东西我就一笔带过了)1.输出类型转换Python写法&#xff1a;2.字符串拼接 拼接输出方式python&#xff1a;NetCore这次为了更加形象对比&#xff0c;一句一…

add php support,wordpress函数add_post_type_support()用法示例

add_post_type_support( string $post_type, string|array $feature )Register support of certain features for a post type.描述All core features are directly associated with a functional area of the edit screen, such as the editor or a meta box. Features includ…

170页PPT入门深度强化学习! 汪荣贵 图灵人工智能 昨天

转自&#xff1a;中国图象图形学报什么是强化学习&#xff1f;和其他学习方法相比&#xff0c;有何不同与特色&#xff1f;深度学习如何与强化学习结合&#xff1f;并各取所长&#xff1f;深度强化学习会成为未来引领智能计算的方法吗&#xff1f;深度强化学习将强化学习和深度…

matlab 文件路径问题

1. fullfile&#xff1a;路径补全 f fullfile(filepart1,...,filepartN) 显然可变参数之间填充的路径分隔符&#xff08;path separator&#xff09;&#xff0c;会根据操作系统而变化&#xff1a; windows&#xff1a;/Linux&#xff1a;\2. fileparts&#xff1a;路径拆分 […

php querystring使用,node.js中的querystring.parse方法使用说明_node.js

方法说明&#xff1a;将字符串转成对象。说白了其实就是把url上带的参数串转成数组对象。(看例子就知道咯)语法&#xff1a;代码如下:querystring.parse(str, [sep], [eq], [options])接收参数&#xff1a;str 欲转换的字符串sep 设置分隔符&#xff0c;默认为 ‘&eq 设置赋…

钟南山院士应邀向欧洲同仁全方位解析新冠肺炎(配中文文字版)

来源&#xff1a;ERS欧洲呼吸学会尊敬的同事们&#xff0c;女士们&#xff0c;先生们&#xff1a;非常荣幸能有机会与您分享我们处理中国境内COVID19感染的相关经验。在这种情况下&#xff0c;我仍然在前线工作&#xff0c;所以准备这个PPT比较匆忙。我只能告诉您一些事实、某些…

powerbi的功能介绍_Power BI性能提升的5大秘密武器

​Power BI无疑已经走了很长一段路&#xff0c;它以其作为自助服务工具的强大根基&#xff0c;易于使用的功能以及在企业领域的持续推动和推动而发展。但是&#xff0c;我们仍然可以发现许多开发和维护Power BI解决方案可以通过应用一些更改而受益匪浅&#xff0c;这些更改将导…

递归推导——猜年龄

一、问题描述 班里转来了一位新同学&#xff0c;他在介绍自己年龄的时候说&#xff1a;“我的年龄的平方是一个三位数&#xff0c;立方是一个四位数&#xff0c;四次方是一个六位数。三次方和四次方正好将0/1/2/3/4/5/6/7/8/9这10个数字全部覆盖。”&#xff0c;那么&#xff0…

matlab画布透明,MATLAB怎么生成带透明对象的矢量图

从很早的版本开始MATLAB就支持对patch、surface等对象设定透明属性&#xff0c;有些示意图也必须使用透明的对象才能充分展示所要表达的含义。对透明对象支持最好的通用图片格式就是.png了&#xff0c;但是png图像并非矢量图形&#xff0c;对于一些需要以矢量图显示的场合并不适…