中学生制作的网站,建设网站及域名费用,长沙本地招聘网最新招聘信息,可以先做网站再开公司吗最近由于业务需要,需要使用php的flush输出缓存刷新#xff0c;处理浏览器超时问题.最初的测试代码如下:ob_start();//打开缓冲区for ($i10; $i0; $i--){echo $i.‘‘;ob_flush();flush();sleep(1);}ob_end_flush();//输出并关闭缓冲die();本以为这样就能1秒钟输出一个数字…最近由于业务需要,需要使用php的flush输出缓存刷新处理浏览器超时问题.最初的测试代码如下:ob_start();//打开缓冲区for ($i10; $i0; $i--){echo $i.‘‘;ob_flush();flush();sleep(1);}ob_end_flush();//输出并关闭缓冲die();本以为这样就能1秒钟输出一个数字但是在nginxphp的环境下实际产生的结果与预期是不一样的结果是10秒后数据一次性都输出出来了。以前在apache里运行正常每隔1秒动态刷新浏览器输出缓存内容那是因为apache里没有开启gzip。纠结了半天上网查了许久的问题最后解决的方法如下:header(Content-Encoding: none\r\n);ob_start();//打开缓冲区for ($i10; $i0; $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才是真正的输出。