当前位置: 首页 > yabo亚博首页 > 文章

为加速 PHP 程序而努力-经典文章-PHP教程-幽默笑话

2019-07-06

为加速 PHP 程序而努力-经典文章-PHP教程-幽默笑话

文章内容为加速PHP程序而努力修改时间:[2012/03/2302:28]阅读次数:[616]发表者:[起缘]动态网站的内容加速显示十分重要,本文通过对PHP几个函数的深入讨论,提出了PHP网页压缩和缓冲的解决方案一、介绍几个控制PHP输出的函数PHP4采用了缓冲机制,在你决定发送以前,所有内容只是存在于缓冲中,而不是直接发送给浏览器,虽然你可以用header和setcookie函数来实现,但是这两个函数相比于功能强大的输出函数来说只是一点“雕虫小技”。 让我们来看看这些函数的真本事:voidob_start(void);本函数告诉PHP处理器把所有输出重定向到内部缓冲,调用这个函数后,就不会有输出到浏览器。

stringob_get_contents(void);本函数把输出缓冲返回到一个字符串,你可以用来把堆积起来的输出一起发送到浏览器。

当然要先关掉缓冲。 intob_get_length(void);本函数返回输出缓冲的长度。 voidob_end_clean(void);本函数清除并关闭缓冲。

在输出到浏览器之前你需要使用这个函数。 voidob_implicit_flush([intflag])本函数用来控制隐式缓冲泻出,缺省为off,如果打开时,对每个print/echo或者输出命令的结果都发送到浏览器。

二、采用输出控制来压缩PHP的输出在开始之前,要保证你的PHP4编译时支持Zlib。

首先,初始化输出缓冲:phpob_start();ob_implicit_flush(0);然后产生所有的输出内容。 phpprint(\"本例为压缩输出!\");页面生成以后,采用:php$contents=ob_get_contents();ob_end_clean();还要检查浏览器是否支持压缩数据,我们采用在变量$HTTP_ACCEPT_ENCODING中检查\"gzip,deflate\"的办法:phpif(ereg(\gzip,deflate\,$HTTP_ACCEPT_ENCODING)){//产生gzip后的内容}else{echo$contents;}下面我们分析怎样产生gzip输出:php//告诉浏览器下面接收的是gzip数据。

header(\"Content-Encoding:gzip\");//显示gzip文件的文件头//只要一次就够了echo\"x1fx8bx08x00x00x00x00x00\";//计算长度和CRC校验码$Size=strlen($contents);$Crc=crc32($contents);//压缩数据$contents=gzcompress($contents,9);//不能直接在这里输出内容,因为还没有写入CRC呢!$contents=substr($contents,0,strlen($contents)-4);echo$contents;gzip_PrintFourChars($Crc);gzip_PrintFourChars($Size);functiongzip_PrintFourChars($Val){for($i=0;$i$i++){echochr($Val%256);$Val=floor($Val/256);}}三、缓冲PHP的输出在PHP4里能很容易的实现缓冲,我们来看例子:php//对请求的URI产生唯一的文件名。 $cached_file=md5($REQUEST_URI);if((!file_exists(\"/cache/$cached_file\"))||(!is_valid(\"/cache/$cached_file\"))){ob_start();ob_implicit_flush(0);//在这里输出缓冲$contents=ob_get_contents();ob_end_clean();$fil=fopen($cached_file,\"w+\");fwrite($fil,$contents,$strlen($contents));fclose($fil);}readfile($cached_file);四、结论PHP输出缓冲函数在操作脚本输出方面十分有用,把缓冲压缩后输出能减少80%的输出时间,这对于存取其他数据资源(例如数据库或者XML)来说,也是一个很好的缓冲机制。