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作的文本留言本的例子(二)
Oct 09 PHP
php adodb连接不同数据库
Mar 19 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
Jun 22 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
PHP常用编译参数中文说明
Sep 27 PHP
Laravel 5框架学习之表单验证
Apr 08 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
php批量删除操作(数据访问)
May 23 PHP
laravel实现上传图片并在页面显示的例子
Oct 14 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php中smarty区域循环的方法
2015/06/11 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
jquery插件制作教程 txtHover
2012/08/17 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
python绘制双柱形图代码实例
2017/12/14 Python
django和vue实现数据交互的方法
2019/08/21 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
什么是servlet
2012/05/08 面试题
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
市场营销计划书
2015/01/17 职场文书
督导岗位职责
2015/02/04 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书