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一些有意思的小区别
Dec 06 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
php设计模式 DAO(数据访问对象模式)
Jun 26 PHP
PHP empty函数报错解决办法
Mar 06 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
微信封装的调用微信签名包的类库
Jun 08 PHP
Laravel下生成验证码的类
Nov 15 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 PHP
PHP回调函数简单用法示例
May 08 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 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 Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
php获取随机数组列表的方法
2014/11/13 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
jstree单选功能的实现方法
2017/06/07 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
vue组件的写法汇总
2018/04/12 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
python多进程实现文件下载传输功能
2018/07/28 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
在django中,关于session的通用设置方法
2019/08/06 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
优秀的茶餐厅创业计划书
2014/01/03 职场文书
军训教官感言
2014/03/02 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
Python序列化模块JSON与Pickle
2022/06/05 Python
Spring中bean集合注入的方法详解
2022/07/07 Java/Android
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python