- ·上一篇文章:五个常见 PHP 数据库问题
- ·下一篇文章:PHP开发入门教程之面向对象
用PHP控制您的浏览器cache
述。
我们现在来看一看第二种方法的具体实现:
Example4.
<?php
ob_start();//打开缓冲区
?>
php页面的全部输出
<?
$content=ob_get_contents();//取得php页面输出的全部内容
$fp=fopen(“output00001.html”,“w”);//创建一个文件,并打开,准备写入
fwrite($fp,$content);//把php页面的内容全部写入output00001.html,然后……
fclose($fp);
?>
这样,所谓的静态模版就很容易的被实现了……
二、捕捉输出
以上的Example4.是一种最简单的情况,你还可以在写入前对$content进行操作……
你可以设法捕捉一些关键字,然后去对它进行再处理,比如Example3.所述的PHP语法高亮显示。个人认为,这个功能是此函数最大的精华所在,它可以解决各种各样的问题,但需要你有足够的想象力……
Example5.
<?
Functionrun_code($code){
If($code){
ob_start();
eval($code);
$contents=ob_get_contents();
ob_end_clean();
}else{
echo“错误!没有输出”;
exit();
}
return$contents;
}
以上这个例子的用途不是很大,不过很典型$code的本身就是一个含有变量的输出页面,而这个例子用eval把$code中的变量替换,然后对输出结果再进行输出捕捉,再一次的进行处理……
Example6.加快传输
<?
/*
**Title.........:PHP4HTTPCompressionSpeedsuptheWeb
**Version.......:1.20
**Author........:catoc<catoc@163.net>
**Filename......:gzdoc.php
**Lastchanged..:18/10/2000
**Requirments...:PHP4>=4.0.1
**PHPwasconfiguredwith--with-zlib[=DIR]
**Notes.........:DynamicContentAccelerationcompresses
**thedatatransmissiondataonthefly
**codebysunjinhu(catoc)<catoc@163.net>
**Mostnewerbrowserssince1998/1999have
**beenequippedtosupporttheHTTP1.1
**standardknownas"content-encoding."
**Essentiallythebrowserindicatestothe
**serverthatitcanaccept"contentencoding"
**andiftheserveriscapableitwillthen
**compressthedataandtransmitit.The
**browserdecompressesitandthenrenders
**thepage.
**
**ModifiedbyJohnLim(jlim@natsoft.com.my)
**basedonideasbySandyMcArthur,Jr
**Usage........:
**Nospacebeforethebeginningofthefirst'<?'tag.
**------------Startoffile----------
**|<?
**|include('gzdoc.php');
**|?>
**|<HTML>
**|...thepage...
**|</HTML>
**|<?
**|gzdocout();
**|?>
**-------------Endoffile-----------
*/
ob_start();
ob_implicit_flush(0);
functionCheckCanGzip(){
global$HTTP_ACCEPT_ENCODING;
if(headers_sent()||connection_timeout()||connection_aborted()){
return0;
}
if(strpos($HTTP_ACCEPT_ENCODING,'x-gzip')!==false)return"x-gzip";
if(strpos($HTTP_ACCEPT_ENCODING,'gzip')!==false)return"gzip";
return0;
}
/*$level=compressionlevel0-9,0=none,9=max*/
functionGzDocOut($level=1,$debug=0){
$ENCODING=CheckCanGzip();
if($ENCODING){
print"n<!--Usecompress$ENCODING-->n";
$Contents=ob_get_contents();
ob_end_clean();
if($debug){
$s="<p>Notcompresslength:".strlen($Contents);
$s.="
Compressedlength:".strlen(gzcompress($Contents,$level));
$Contents.=$s;
}
header("Content-Encoding:$ENCODING");
print"x1fx8bx08x00x00x00x00x00";
$Size=strlen($Contents);
$Crc=crc32($Contents);
$Contents=gzcompress($Contents,$level);
$Contents=substr($Contents,0,strlen($Contents)-4);
print$Contents;
printpack('V',$Crc);
printpack('V',$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>
这是catoc的一段很早以前的代码,是在weblogs.com看到的,他利用了zlib的函数,对传输的内容进行了压缩,测试表明,对于10k以上的页面,会产生效果,而且页面越大,效果越明显……
我们现在来看一看第二种方法的具体实现:
Example4.
ob_start();//打开缓冲区
?>
php页面的全部输出
$content=ob_get_contents();//取得php页面输出的全部内容
$fp=fopen(“output00001.html”,“w”);//创建一个文件,并打开,准备写入
fwrite($fp,$content);//把php页面的内容全部写入output00001.html,然后……
fclose($fp);
?>
这样,所谓的静态模版就很容易的被实现了……
二、捕捉输出
以上的Example4.是一种最简单的情况,你还可以在写入前对$content进行操作……
你可以设法捕捉一些关键字,然后去对它进行再处理,比如Example3.所述的PHP语法高亮显示。个人认为,这个功能是此函数最大的精华所在,它可以解决各种各样的问题,但需要你有足够的想象力……
Example5.
Functionrun_code($code){
If($code){
ob_start();
eval($code);
$contents=ob_get_contents();
ob_end_clean();
}else{
echo“错误!没有输出”;
exit();
}
return$contents;
}
以上这个例子的用途不是很大,不过很典型$code的本身就是一个含有变量的输出页面,而这个例子用eval把$code中的变量替换,然后对输出结果再进行输出捕捉,再一次的进行处理……
Example6.加快传输
/*
**Title.........:PHP4HTTPCompressionSpeedsuptheWeb
**Version.......:1.20
**Author........:catoc<catoc@163.net>
**Filename......:gzdoc.php
**Lastchanged..:18/10/2000
**Requirments...:PHP4>=4.0.1
**PHPwasconfiguredwith--with-zlib[=DIR]
**Notes.........:DynamicContentAccelerationcompresses
**thedatatransmissiondataonthefly
**codebysunjinhu(catoc)<catoc@163.net>
**Mostnewerbrowserssince1998/1999have
**beenequippedtosupporttheHTTP1.1
**standardknownas"content-encoding."
**Essentiallythebrowserindicatestothe
**serverthatitcanaccept"contentencoding"
**andiftheserveriscapableitwillthen
**compressthedataandtransmitit.The
**browserdecompressesitandthenrenders
**thepage.
**
**ModifiedbyJohnLim(jlim@natsoft.com.my)
**basedonideasbySandyMcArthur,Jr
**Usage........:
**Nospacebeforethebeginningofthefirst'<?'tag.
**------------Startoffile----------
**|<?
**|include('gzdoc.php');
**|?>
**|<HTML>
**|...thepage...
**|</HTML>
**|<?
**|gzdocout();
**|?>
**-------------Endoffile-----------
*/
ob_start();
ob_implicit_flush(0);
functionCheckCanGzip(){
global$HTTP_ACCEPT_ENCODING;
if(headers_sent()||connection_timeout()||connection_aborted()){
return0;
}
if(strpos($HTTP_ACCEPT_ENCODING,'x-gzip')!==false)return"x-gzip";
if(strpos($HTTP_ACCEPT_ENCODING,'gzip')!==false)return"gzip";
return0;
}
/*$level=compressionlevel0-9,0=none,9=max*/
functionGzDocOut($level=1,$debug=0){
$ENCODING=CheckCanGzip();
if($ENCODING){
print"n<!--Usecompress$ENCODING-->n";
$Contents=ob_get_contents();
ob_end_clean();
if($debug){
$s="<p>Notcompresslength:".strlen($Contents);
$s.="
Compressedlength:".strlen(gzcompress($Contents,$level));
$Contents.=$s;
}
header("Content-Encoding:$ENCODING");
print"x1fx8bx08x00x00x00x00x00";
$Size=strlen($Contents);
$Crc=crc32($Contents);
$Contents=gzcompress($Contents,$level);
$Contents=substr($Contents,0,strlen($Contents)-4);
print$Contents;
printpack('V',$Crc);
printpack('V',$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>
这是catoc的一段很早以前的代码,是在weblogs.com看到的,他利用了zlib的函数,对传输的内容进行了压缩,测试表明,对于10k以上的页面,会产生效果,而且页面越大,效果越明显……
