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学习笔记 类的声明与对象实例化
Jun 13 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
ajax返回值中有回车换行、空格的解决方法分享
Oct 24 PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
thinkphp循环结构用法实例
Nov 24 PHP
php实现json编码的方法
Jul 30 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
Sep 21 PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 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木马攻击防御之道
2008/03/24 PHP
swfupload 多文件上传实现代码
2008/08/27 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
详解vue中axios的封装
2018/07/18 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
python实现简单温度转换的方法
2015/03/13 Python
使用python实现个性化词云的方法
2017/06/16 Python
python实现简易版计算器
2020/06/22 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
Python输出指定字符串的方法
2020/02/06 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
html5使用canvas画一条线
2014/12/15 HTML / CSS
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
新年爱情寄语
2014/04/08 职场文书
公休请假条
2014/04/11 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
英语通知范文
2015/04/22 职场文书
刘胡兰观后感
2015/06/16 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
MySQL注入基础练习
2021/05/30 MySQL