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

來源:互聯網
上載者:User

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.

下面是My Code:(讀入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},還望高手賜教。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.