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 相关文章推荐
用PHP与XML联手进行网站编程代码实例
Jul 10 PHP
php开发环境配置记录
Jan 14 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
php数组中包含中文的排序方法
Jun 03 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
非常重要的php正则表达式详解
Jan 04 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
php 多文件上传的实现实例
Oct 23 PHP
laravel 多图上传及图片的存储例子
Oct 14 PHP
php 的多进程操作实践案例分析
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
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
开源SNS系统-ThinkSNS
2008/05/18 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
python和JavaScript哪个容易上手
2020/06/23 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
SQL Server笔试题
2012/01/10 面试题
编辑个人求职信范文
2013/09/21 职场文书
工地宣传标语
2014/06/18 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
2015年市场部工作总结
2015/04/30 职场文书
九年级英语教学反思
2016/02/15 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL