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 相关文章推荐
MVC模式的PHP实现
Oct 09 PHP
PHP下对数组进行排序的函数
Aug 08 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
解析php中const与define的应用区别
Jun 18 PHP
PHP基础知识介绍
Sep 17 PHP
curl实现站外采集的方法和技巧
Jan 31 PHP
php 类自动载入的方法
Jun 03 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 PHP
Laravel5权限管理方法详解
Jul 26 PHP
PHP数据库操作三:redis用法分析
Aug 16 PHP
php实现对文件压缩简单的方法
Sep 29 PHP
PHP数组与字符串互相转换实例
May 05 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 URL编码解码函数代码
2009/03/10 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
JS模板实现方法
2013/04/03 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
python通过shutil实现快速文件复制的方法
2015/03/14 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
Python3获取cookie常用三种方案
2020/10/05 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
计算机专业个人求职自荐信
2013/09/21 职场文书
新学期教师寄语
2014/04/02 职场文书
安全生产承诺书范文
2014/05/22 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python