程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP+.htaccess實現全站靜態HTML文件GZIP壓縮傳輸(一)

PHP+.htaccess實現全站靜態HTML文件GZIP壓縮傳輸(一)

編輯:關於PHP編程

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},還望高手賜教。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved