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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
PHP设计模式之装饰者模式
Feb 29 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
linux实现php定时执行cron任务详解
Dec 24 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
PHP下载生成的csv文件及问题总结
Aug 06 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 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使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
python os模块简单应用示例
2019/05/23 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
python压包的概念及实例详解
2021/02/17 Python
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
土木工程毕业生自荐信
2013/11/12 职场文书
太太口服液广告词
2014/03/20 职场文书
党员个人整改措施
2014/10/24 职场文书
创先争优个人总结
2015/03/04 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
人民的好儿女观后感
2015/06/18 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
业务员管理制度范本
2015/08/06 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL