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中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
PHP中Header使用的HTTP协议及常用方法小结
Nov 04 PHP
php实现复制移动文件的方法
Jul 29 PHP
详解PHP+AJAX无刷新分页实现方法
Nov 03 PHP
PHP下载远程图片并保存到本地方法总结
Jan 22 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
php mysql数据库操作类(实例讲解)
Aug 06 PHP
PHP实现的简单组词算法示例
Apr 10 PHP
Laravel框架验证码类用法实例分析
Sep 11 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
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
python3安装speech语音模块的方法
2018/12/24 Python
20行python代码实现人脸识别
2019/05/05 Python
详解python深浅拷贝区别
2019/06/24 Python
python实现图片中文字分割效果
2019/07/22 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
学校安全检查制度
2014/01/27 职场文书
教师个人鉴定材料
2014/02/08 职场文书
尊师重教演讲稿
2014/09/04 职场文书
基层党支部整改方案
2014/10/25 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL
python批量创建变量并赋值操作
2021/06/03 Python
python实现会员管理系统
2022/03/18 Python