PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)


Posted in PHP onFebruary 15, 2007

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

由于九州未来的服务器限制流量,那么减少流量负载也就能减少金钱支出。
如何减少流量,最方便的办法就是用Gzip压缩,这个apache的gzip压缩是靠一个叫做zlib的类库和gzip的模块(mod_gzip.c)完成的,这玩意专门有一帮牛人研究,因为gzip本身就大名鼎鼎的,并且具有高压缩率开源的压缩原理,所以我们的开源apache才会采用这种开源的压缩技术。

恩,这个.htaccess也是apache的一个牛比东西,太强大了,也是根据你的apache安装了什么模块而决定你这个文件里面可以写什么东西,比如你安装了URL重写模块(Module mod_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 模式打开  
RewriteEngine On  
RewriteBase /  
RewriteRule index2\.html l.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');  
       }  
   }  
   else if ( $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'];  
echo READ_FILE_CONTENTS($rfile);  
function READ_FILE_CONTENTS($file)  
{  
   if(!function_exists("file_get_contents"))return file_get_contents($file);  
   $ifile = fopen($file,"r");  
   $contents = false;  
   if($ifile) while (!feof($ifile)) $contents .= fgets($ifile);  
   fclose($ifile);  
   return $contents;  
}  
?>  
<?php  
// Compress buffered output if required and send to browser  
if ( $do_gzip_compress )  
{  
   //  
   // Borrowed from php.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 "\x1f\x8b\x08\x00\x00\x00\x00\x00";  
   echo $gzip_contents;  
   echo pack('V', $gzip_crc);  
   echo pack('V', $gzip_size);  
}  
exit;  
?> 

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /xxx/xxx.php [L]

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

PHP 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
PHP调用Linux的命令行执行文件压缩命令
Jan 27 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
PHP多线程类及用法实例
Dec 03 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
PHP安全上传图片的方法
Mar 21 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
Jun 23 PHP
php简单备份与还原MySql的方法
May 09 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
Oct 25 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 PHP
php调用mysql存储过程
Feb 14 #PHP
mysql中存储过程、函数的一些问题
Feb 14 #PHP
让PHP支持页面回退的两种方法[转]
Feb 14 #PHP
浅析PHP水印技术
Feb 14 #PHP
解决GD中文乱码问题
Feb 14 #PHP
使用apache模块rewrite_module (转)
Feb 14 #PHP
用PHP的ob_start();控制您的浏览器cache!
Feb 14 #PHP
You might like
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
Python高效编程技巧
2013/01/07 Python
python写的ARP攻击代码实例
2014/06/04 Python
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
在双python下设置python3为默认的方法
2018/10/31 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
python的依赖管理的实现
2019/05/14 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
工商管理专业学生的自我评价
2013/10/01 职场文书
电子商务专业学生的自我鉴定
2013/11/28 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
食堂卫生管理制度
2015/08/04 职场文书