PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)

 更新时间:2007年02月15日 00:00:00   作者:  
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对大文件进行读取操作的实现代码

    在php中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file、file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能。但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法
    2013-01-01
  • php自动获取关键字的方法

    php自动获取关键字的方法

    这篇文章主要介绍了php自动获取关键字的方法,通过自定义函数tiqukeyword实现关键字的自动获取功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • php输入流php://input使用浅析

    php输入流php://input使用浅析

    这篇文章主要介绍了php输入流php://input使用浅析,本文只是作为一个简单的了解,给出的例子也相对简单,需要的朋友可以参考下
    2014-09-09
  • 一个PHP分页类的代码

    一个PHP分页类的代码

    最近有朋友问我能不能写个php分页类,我仔细考虑了一下,其实,我已经有一段时间没碰过这个东西了,说点经验,写点简单的还行,要是写个太复杂的,是挺有点费劲的
    2011-05-05
  • 简单谈谈php中ob_flush和flush的区别

    简单谈谈php中ob_flush和flush的区别

    本文简单的对php中ob_flush和flush进行了对比分析,得出了他们之间的区别,给需要的小伙伴参考下。
    2014-11-11
  • php5 mysql分页实例代码

    php5 mysql分页实例代码

    最新分页实例代码
    2008-04-04
  • 编写PHP脚本过滤用户上传的图片

    编写PHP脚本过滤用户上传的图片

    这篇文章主要介绍了编写PHP脚本过滤用户上传的图片,至于是不是能达到设想的准确过滤那种图片的效果,这个就...需要的朋友可以参考下
    2015-07-07
  • PHP swoole中使用task进程异步的处理耗时任务应用案例分析

    PHP swoole中使用task进程异步的处理耗时任务应用案例分析

    这篇文章主要介绍了PHP swoole中使用task进程异步的处理耗时任务,结合具体应用案例形式分析了PHP swoole中使用task进程异步的处理耗时任务相关使用场景、操作方法与注意事项,需要的朋友可以参考下
    2020-03-03
  • PHP中抽象类和抽象方法概念与用法分析

    PHP中抽象类和抽象方法概念与用法分析

    这篇文章主要介绍了PHP中抽象类和抽象方法概念与用法,较为详细的分析了php中抽象类与抽象方法的关键字、定义、使用方法与相关注意事项,需要的朋友可以参考下
    2016-05-05
  • php循环检测目录是否存在并创建(循环创建目录)

    php循环检测目录是否存在并创建(循环创建目录)

    php循环检测目录是否存在并创建,需要的朋友可以参考下。
    2011-01-01

最新评论