<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿Tim日志]]></title> 
<link>https://atim.cn/index.php</link> 
<description><![CDATA[专业的php开发者.开发团队的带队人]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿Tim日志]]></copyright>
<item>
<link>https://atim.cn/post//</link>
<title><![CDATA[php的Ob_start]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[开发应用]]></category>
<pubDate>Mon, 02 Mar 2015 16:12:54 +0000</pubDate> 
<guid>https://atim.cn/post//</guid> 
<description>
<![CDATA[ 
	其实我不是想说ob_start，而是解决一个nginx的proxy_cache问题。<br/><br/>我使用proxy_cache对根据页面头信息里的有效期和状态页面进行缓存。这个的性能还是很不多。交给php进行控制，而且不需要每个页面都创建。只是第一次访问时才生成缓存。<br/><br/>在长期的运行下，发现一个问题，如果程序在出现超时后，没有返回非200的状态（如500）.还是返回200。这样就问题大了。本来proxy_cache就是靠状态来判断，在出错后还是返回200这样我如何是好呢？所以我就想到使用ob_start()进行缓存。但实际上这个是没有作用。<br/><br/>ob_start只是开通缓存的通道。如果出错问题，他还是会返回通道的内容数据，所以不会有影响，只是非正常退出，不返回数据而已。<br/><br/>另外ob_start开启的缓存通道可以多个开通。<br/><br/>所以ob_start不能解决状态问题。最后使用set_error_handler()，设置一个出错回显的函数。直接在函数中针对出错的函数。输出500的头信息。<br/><br/>好了这个就可以解决问题了。<br/><br/>那ob_start还要不要用？我想还是用吧。出错后就不要输出页面的内容了。因为内容未处理完。不如不输出。<br/><div class="code"><br/>&lt;?php<br/>ob_start()<br/>set_error_handler(&#039;my_error_handler&#039;);<br/><br/>function my_error_handler($errno, $errmsg, $filename, $linenum, $vars)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;header(&#039;HTTP/1.1 500 Internal Server Error&#039;);<br/>&#125;<br/>$smarty = new Smarty();<br/>$smarty-&gt;display();<br/></div>
]]>
</description>
</item><item>
<link>https://atim.cn/post//#blogcomment</link>
<title><![CDATA[[评论] php的Ob_start]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://atim.cn/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>