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 相关文章推荐
fleaphp rolesNameField bug解决方法
Apr 23 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
php共享内存段示例分享
Jan 20 PHP
PHP 正则表达式常用函数
Aug 17 PHP
PHP制作万年历
Jan 07 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
PHP滚动日志的代码实现
Jun 10 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
php strftime函数的详细用法
Jun 21 PHP
微信推送功能实现方式图文详解
Jul 12 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日历程序
2006/12/06 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
Jquery ui css framework
2010/06/28 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
自学python用什么系统好
2020/06/23 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
简短大学毕业感言
2014/01/18 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
老员工辞职信范文
2015/05/12 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
pandas求平均数和中位数的方法实例
2021/08/04 Python