<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>琥珀春秋 &#187; php</title>
	<atom:link href="http://amberlife.net/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://amberlife.net</link>
	<description>又一个 WordPress Blog</description>
	<lastBuildDate>Sat, 17 Jul 2010 13:36:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>软件工程考试资料</title>
		<link>http://amberlife.net/2010/06/%e8%bd%af%e4%bb%b6%e5%b7%a5%e7%a8%8b%e8%80%83%e8%af%95%e8%b5%84%e6%96%99/</link>
		<comments>http://amberlife.net/2010/06/%e8%bd%af%e4%bb%b6%e5%b7%a5%e7%a8%8b%e8%80%83%e8%af%95%e8%b5%84%e6%96%99/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 07:41:32 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=222</guid>
		<description><![CDATA[软件工程考试资料
访问此链接可获取：http://amberlife.net/wp-content/uploads/2010/06/软件工程.htm
，转载自http://www.wisdomlife.cn/review2010/se.html
]]></description>
			<content:encoded><![CDATA[<p>软件工程考试资料</p>
<p>访问此链接可获取：<a href="http://amberlife.net/wp-content/uploads/2010/06/软件工程.htm">http://amberlife.net/wp-content/uploads/2010/06/软件工程.htm</a></p>
<p>，转载自<a href="http://www.wisdomlife.cn/review2010/se.html">http://www.wisdomlife.cn/review2010/se.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2010/06/%e8%bd%af%e4%bb%b6%e5%b7%a5%e7%a8%8b%e8%80%83%e8%af%95%e8%b5%84%e6%96%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP缓冲机制（转）</title>
		<link>http://amberlife.net/2009/08/php%e7%bc%93%e5%86%b2%e6%9c%ba%e5%88%b6%ef%bc%88%e8%bd%ac%ef%bc%89/</link>
		<comments>http://amberlife.net/2009/08/php%e7%bc%93%e5%86%b2%e6%9c%ba%e5%88%b6%ef%bc%88%e8%bd%ac%ef%bc%89/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 14:39:40 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=119</guid>
		<description><![CDATA[动态网站的内容加速显示十分重要，本文通过对 PHP 几个函数的深入讨论，提出了 PHP 网页压缩和缓冲的解决方案

一、介绍几个控制 PHP 输出的函数
PHP采用了缓冲机制，在你决定发送以前，所有内容只是存在于缓冲中，而不是直接发送给浏览器，虽然你可以用 header 和 setcookie 函数来实现，但是这两个函数相比于功能强大的输出函数来说只是一点“雕虫小技”。让我们来看看这些函数的真本事：
void ob_start(void);
本函数告诉 PHP 处理器把所有输出重定向到内部缓冲，调用这个函数后，就不会有输出到浏览器。
string ob_get_contents(void);
本函数把输出缓冲返回到一个字符串，你可以用来把堆积起来的输出一起发送到浏览器。当然要先关掉缓冲。
int ob_get_length(void);
本函数返回输出缓冲的长度。
void ob_end_clean(void);
本函数清除并关闭缓冲。在输出到浏览器之前你需要使用这个函数。
void ob_implicit_flush ([int flag])
本函数用来控制隐式缓冲泻出，缺省为 off，如果打开时，对每个 print/echo 或者输出命令的结果都发送到浏览器。
二、采用输出控制来压缩 PHP 的输出
在开始之前，要保证你的 PHP4 编译时支持 Zlib。
首先，初始化输出缓冲：
ob_start();
ob_implicit_flush(0);
?&#62;
然后产生所有的输出内容。
print(&#8221;本例为压缩输出！&#8221;);
?&#62;
页面生成以后，采用：
$contents = ob_get_contents();
ob_end_clean();
?&#62;
还要检查浏览器是否支持压缩数据，我们采用在变量 $HTTP_ACCEPT_ENCODING 中检查 &#8220;gzip, deflate&#8221;的办法：
if(ereg(&#8217;gzip, deflate&#8217;,$HTTP_ACCEPT_ENCODING)) {
// 产生 gzip 后的内容
} else {
echo $contents;
}
?&#62;
下面我们分析怎样产生 gzip 输出：
// 告诉浏览器下面接收的是 gzip 数据。
header(&#8221;Content-Encoding: gzip&#8221;);
// 显示 gzip 文件的文件头
// 只要一次就够了
echo &#8220;x1fx8bx08&#215;00x00&#215;00x00&#215;00&#8243;;
// 计算长度和 CRC [...]]]></description>
			<content:encoded><![CDATA[<p>动态网站的内容加速显示十分重要，本文通过对 PHP 几个函数的深入讨论，提出了 PHP 网页压缩和缓冲的解决方案</p>
<p><span id="more-119"></span></p>
<p>一、介绍几个控制 PHP 输出的函数</p>
<p>PHP采用了缓冲机制，在你决定发送以前，所有内容只是存在于缓冲中，而不是直接发送给浏览器，虽然你可以用 header 和 setcookie 函数来实现，但是这两个函数相比于功能强大的输出函数来说只是一点“雕虫小技”。让我们来看看这些函数的真本事：</p>
<p>void ob_start(void);</p>
<p>本函数告诉 PHP 处理器把所有输出重定向到内部缓冲，调用这个函数后，就不会有输出到浏览器。</p>
<p>string ob_get_contents(void);</p>
<p>本函数把输出缓冲返回到一个字符串，你可以用来把堆积起来的输出一起发送到浏览器。当然要先关掉缓冲。</p>
<p>int ob_get_length(void);</p>
<p>本函数返回输出缓冲的长度。</p>
<p>void ob_end_clean(void);</p>
<p>本函数清除并关闭缓冲。在输出到浏览器之前你需要使用这个函数。</p>
<p>void ob_implicit_flush ([int flag])</p>
<p>本函数用来控制隐式缓冲泻出，缺省为 off，如果打开时，对每个 print/echo 或者输出命令的结果都发送到浏览器。</p>
<p>二、采用输出控制来压缩 PHP 的输出</p>
<p>在开始之前，要保证你的 PHP4 编译时支持 Zlib。<br />
首先，初始化输出缓冲：</p>
<p>ob_start();<br />
ob_implicit_flush(0);<br />
?&gt;</p>
<p>然后产生所有的输出内容。</p>
<p>print(&#8221;本例为压缩输出！&#8221;);<br />
?&gt;<br />
页面生成以后，采用：</p>
<p>$contents = ob_get_contents();<br />
ob_end_clean();<br />
?&gt;</p>
<p>还要检查浏览器是否支持压缩数据，我们采用在变量 $HTTP_ACCEPT_ENCODING 中检查 &#8220;gzip, deflate&#8221;的办法：</p>
<p>if(ereg(&#8217;gzip, deflate&#8217;,$HTTP_ACCEPT_ENCODING)) {<br />
// 产生 gzip 后的内容<br />
} else {<br />
echo $contents;<br />
}<br />
?&gt;</p>
<p>下面我们分析怎样产生 gzip 输出：</p>
<p>// 告诉浏览器下面接收的是 gzip 数据。<br />
header(&#8221;Content-Encoding: gzip&#8221;);<br />
// 显示 gzip 文件的文件头<br />
// 只要一次就够了<br />
echo &#8220;x1fx8bx08&#215;00x00&#215;00x00&#215;00&#8243;;<br />
// 计算长度和 CRC 校验码<br />
$Size = strlen($contents);<br />
$Crc = crc32($contents);<br />
// 压缩数据<br />
$contents = gzcompress($contents, 9);<br />
// 不能直接在这里输出内容，因为还没有写入 CRC 呢！<br />
$contents = substr($contents, 0, strlen($contents) &#8211; 4);<br />
echo $contents;<br />
gzip_PrintFourChars($Crc);<br />
gzip_PrintFourChars($Size);<br />
function gzip_PrintFourChars($Val) {<br />
for ($i = 0; $i &lt; 4; $i ++) { echo chr($Val % 256); $Val = floor($Val / 256); } } ?&gt;</p>
<p>三、缓冲 PHP 的输出</p>
<p>在 PHP里能很容易的实现缓冲，我们来看例子：</p>
<p>// 对请求的 URI 产生唯一的文件名。<br />
$cached_file=md5($REQUEST_URI);<br />
if((!file_exists(&#8221;/cache/$cached_file&#8221;))||(!is_valid(&#8221;/cache/$cached_file&#8221;))) {<br />
ob_start();<br />
ob_implicit_flush(0);<br />
// 在这里输出缓冲<br />
$contents = ob_get_contents();<br />
ob_end_clean();<br />
$fil=fopen($cached_file,&#8221;w+&#8221;);<br />
fwrite($fil,$contents,$strlen($contents));<br />
fclose($fil);<br />
}</p>
<p>readfile($cached_file);<br />
?&gt;</p>
<p>四、结论</p>
<p>PHP 输出缓冲函数在操作脚本输出方面十分有用，把缓冲压缩后输出能减少 80% 的输出时间，这对于存取其他数据资源（例如数据库或者 XML）来说，也是一个很好的缓冲机制。</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2009/08/php%e7%bc%93%e5%86%b2%e6%9c%ba%e5%88%b6%ef%bc%88%e8%bd%ac%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
