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数据库类
May 27 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
浅析php创建者模式
Nov 25 PHP
yii实现CheckBox复选框在同一行显示的方法
Dec 03 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 PHP
PHP排序算法类实例
Jun 17 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
Jan 09 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 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
农民C键的运用技巧
2020/03/04 星际争霸
人大复印资料处理程序_输入篇
2006/10/09 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python实现感知机(PLA)算法
2017/12/20 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
pycharm安装及如何导入numpy
2020/04/03 Python
Python中logger日志模块详解
2020/08/04 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
中国跨境电商:Tomtop
2017/03/16 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
大学生职业规划前言模板
2013/12/27 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
学生会离职感言
2014/02/11 职场文书
质量标语大全
2014/06/12 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
PHP中->和=>的意思
2021/03/31 PHP