|

提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).
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才是真实的输出。
联系我时,请说是在 挂海论坛 上看到的,谢谢! |
上一篇: Thinkphp3.2.3开发实战,汽车租赁网站CP加Wap 全套详细教程下一篇: 分享个390G的PHP学习动画教程+部分源码
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。
2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。
|