手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
摘要:apache的强大终于超出了我的想象,仅仅蜻蜓点水般触及了一点php皮毛,这点皮毛就在我原有的知识库基础上爆炸开来,好像PN结的“雪崩击穿”...

apache的强大终于超出了我的想象,仅仅蜻蜓点水般触及了一点php皮毛,这点皮毛就在我原有的知识库基础上爆炸开来,好像PN结的“雪崩击穿”一样,让我想到了多种技术结合无限的应用前景。

由于九州未来的服务器限制流量,那么减少流量负载也就能减少金钱支出。

如何减少流量,最方便的办法就是用Gzip压缩,这个apache的gzip压缩是靠一个叫做zlib的类库和gzip的模块(mod_gzip.c)完成的,这玩意专门有一帮牛人研究,因为gzip本身就大名鼎鼎的,并且具有高压缩率开源的压缩原理,所以我们的开源apache才会采用这种开源的压缩技术。

恩,这个.htaccess也是apache的一个牛比东西,太强大了,也是根据你的apache安装了什么模块而决定你这个文件里面可以写什么东西,比如你安装了URL重写模块(Modulemod_rewrite.c)的话你就可以写一些URL重写代码来实现你的文件重写。

知识普及完毕。。。。

进入正题。

如何让自己的全站的真实的静态的html文件,变成gzip传输的呢?

为了理解方便,我给大家写了一个简单的php程序。

首先我们建立一个采用gzip压缩算法的l.php,在该文件中读入xxx.html并显示出来,然后再在.htaccess里面重写xxx.html到1.php就可以了。简单吧。由于我们的服务器认为.htaccess的优先级最高,所以访问xxx.html的时候没有访问到这个静态文件,反而访问到了1.php.

下面是我的代码:(读入index2.html,然后重写之)

.htaccess:

复制代码 代码如下:

#将RewriteEngine模式打开

RewriteEngineOn

RewriteBase/

RewriteRuleindex2.htmll.php?fn=index2.html

1.php

复制代码 代码如下:

<?php

$phpver=phpversion();

$useragent=(isset($_SERVER["HTTP_USER_AGENT"]))?$_SERVER["HTTP_USER_AGENT"]:$HTTP_USER_AGENT;

if($phpver>='4.0.4pl1'&&(strstr($useragent,'compatible')||strstr($useragent,'Gecko')))

{

if(extension_loaded('zlib'))

{

ob_start('ob_gzhandler');

}

}

elseif($phpver>'4.0')

{

if(strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'],'gzip'))

{

if(extension_loaded('zlib'))

{

$do_gzip_compress=TRUE;

ob_start();

ob_implicit_flush(0);

header('Content-Encoding:gzip');

}

}

}

?>

<?php

$rfile=addslashes(dirname(dirname(__FILE__))).'/'.'./httpdocs/'.$_REQUEST['fn'];

echoREAD_FILE_CONTENTS($rfile);

functionREAD_FILE_CONTENTS($file)

{

if(!function_exists("file_get_contents"))returnfile_get_contents($file);

$ifile=fopen($file,"r");

$contents=false;

if($ifile)while(!feof($ifile))$contents.=fgets($ifile);

fclose($ifile);

return$contents;

}

?>

<?php

//Compressbufferedoutputifrequiredandsendtobrowser

if($do_gzip_compress)

{

//

//Borrowedfromphp.net!

//

$gzip_contents=ob_get_contents();

ob_end_clean();

$gzip_size=strlen($gzip_contents);

$gzip_crc=crc32($gzip_contents);

$gzip_contents=gzcompress($gzip_contents,9);

$gzip_contents=substr($gzip_contents,0,strlen($gzip_contents)-4);

echo"x1fx8bx08x00x00x00x00x00";

echo$gzip_contents;

echopack('V',$gzip_crc);

echopack('V',$gzip_size);

}

exit;

?>

实际上这个东西能用更好的方法解决,就是用这个

RewriteCond%{REQUEST_FILENAME}!-f

RewriteCond%{REQUEST_FILENAME}!-d

RewriteRule./xxx/xxx.php[L]

但是我还没研究出来怎么处理这个%{REQUEST_FILENAME},还望高手赐教。

【PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)】相关文章:

PHP实现远程下载文件到本地

php实现将上传word文件转为html的方法

PHP.ini安全配置检测工具pcc简单介绍

用PHP实现文件上传二法

PHP安全编程之加密功能

PHP实现过滤各种HTML标签

PHP常用处理静态操作类

php实现CSV文件导入和导出方法

PHP4引用文件语句的对比

用PHP实现WEB动态网页静态

精品推荐
分类导航