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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
PHP学习资料汇总与网址
Mar 16 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 PHP
PHP中的Iterator迭代对象属性详解
Apr 12 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
PHPstorm激活码2020年5月13日亲测有效
Sep 17 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
长波知识介绍
2021/03/01 无线电
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP防盗链代码实例
2014/08/27 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
详解python中requirements.txt的一切
2017/03/03 Python
深入理解Python3中的http.client模块
2017/03/29 Python
python代码实现ID3决策树算法
2017/12/20 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
C#面试题问题集
2016/04/02 面试题
生物技术毕业生自荐信
2013/10/23 职场文书
大学生毕业自我鉴定
2013/11/06 职场文书
保密承诺书范文
2014/03/27 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
房展策划方案
2014/06/07 职场文书
租房协议书
2014/09/12 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
个人总结格式范文
2015/03/09 职场文书
2015年班干部工作总结
2015/04/29 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python