<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[关于PHP 刷新缓冲区操作(边执行边输出)简单分析]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Fri, 29 Mar 2013 07:01:55 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：估计那个同学想做PHP的长连接，或者是想有些较为少用的用法，但它涉及到了缓冲的概念（PHP和Apache，PHP和Nginx等，Web服务器的一个接口等）<br/>关于PHP 刷新缓冲区操作(边执行边输出)简单分析：<br/>PHP群里有一位同学问<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
ob_start();
echo &#039;Begin ...&lt;br /&gt;&#039;;
for( $i&nbsp;&nbsp;=&nbsp;&nbsp;0 ;
 $i&nbsp;&nbsp;&lt;&nbsp;&nbsp;10 ;
 $i++ ) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;echo $i . &#039;&lt;br /&gt;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;flush();
&nbsp;&nbsp;&nbsp;&nbsp;ob_flush();
&nbsp;&nbsp;&nbsp;&nbsp;sleep(1);
&#125;
echo &#039;End ...&lt;br /&gt;&#039;;
exit;
?&gt;
</textarea><br/><br/>这段代码在apache下能边执行边输出，在nginx下怎么就不行了？<br/><br/>简单的理解为2个问题：<br/><br/>1 首先这个问题核心就是当缓冲区数据达到一定量时先输出到浏览器。<br/><br/>2 apache和nginx 的php执行方式差异。<br/><br/>这个问题和我上篇博文《FastCGI 技术介绍》有一定的联系，apache是以CGI/CLI的方式调用php。而nginx 是以fastcgi方式调用PHP。FastCGI 基于Unix domain socket或者tcp/ip进行通信。<br/>步骤&nbsp;&nbsp;名称&nbsp;&nbsp;描述<br/>1&nbsp;&nbsp;FCGI_PARAMS&nbsp;&nbsp;从web服务器如nginx向fastcgi应用程序发送请求数据、环境变量等<br/>2&nbsp;&nbsp;FCGI_STDIN&nbsp;&nbsp;接送从web服务器发送来的数据<br/>3&nbsp;&nbsp;FCGI_DATA&nbsp;&nbsp;过滤web服务器发送来的数据<br/>4&nbsp;&nbsp;FCGI_STDOUT&nbsp;&nbsp;发送数据到web服务器<br/>5&nbsp;&nbsp;FCGI_STDERR&nbsp;&nbsp;发送状态(错误信息)到web服务器<br/>6&nbsp;&nbsp;FCGI_END_REQUEST&nbsp;&nbsp;结束本次http请求<br/><br/>就是意味着可以设置一定的缓冲区大小 来实现。<br/><br/>土话就是：人为让缓冲区容量达到一定额。<br/><br/>nginx FastCGI 提供了2个参数<br/><br/>修改nginx.conf<br/><textarea name="code" class="shell" rows="15" cols="100">
location ~ &#92;.php$ &#123;
&nbsp;&nbsp;&nbsp;&nbsp;…
&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_buffer_size 2k;//缓冲区大小
&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_buffers 256 2k; //开辟256个 2k大小的缓冲区 
&#125;
</textarea><br/>参数可以调整。具体文档：http://wiki.nginx.org/HttpFastcgiModule#fastcgi_buffer_size<br/><br/>修改上述PHP代码<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php 
echo &#039;Begin ...&lt;br /&gt;&#039;;
for ($i = 0; $i &lt; 10; $i++) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;echo $i . &#039;&lt;br /&gt;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;echo str_repeat(&quot; &quot;, 1024 * 2);//人为将缓冲数据扩充到2k
&nbsp;&nbsp;&nbsp;&nbsp;flush();
&nbsp;&nbsp;&nbsp;&nbsp;ob_flush();
&nbsp;&nbsp;&nbsp;&nbsp;sleep(1);
&#125;
echo &#039;End ...&lt;br /&gt;&#039;;
exit;
?&gt;
</textarea><br/><br/><br/>来自：http://www.cydphp.cn/?p=155<br/>再就是这位兄弟的：http://www.cydphp.cn/?p=107&nbsp;&nbsp;【写得比较原始，原始的CGI，当年没有PHP时是这么干的，可以有较为深入的理解】
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 关于PHP 刷新缓冲区操作(边执行边输出)简单分析]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>