PHP+.htaccess實(shí)現(xiàn)全站靜態(tài)HTML文件GZIP壓縮傳輸(一)
更新時(shí)間:2007年02月15日 00:00:00 作者:
apache的強(qiáng)大終于超出了我的想象,僅僅蜻蜓點(diǎn)水般觸及了一點(diǎn)php皮毛,這點(diǎn)皮毛就在我原有的知識(shí)庫(kù)基礎(chǔ)上爆炸開(kāi)來(lái),好像PN結(jié)的“雪崩擊穿”一樣,讓我想到了多種技術(shù)結(jié)合無(wú)限的應(yīng)用前景。
由于九州未來(lái)的服務(wù)器限制流量,那么減少流量負(fù)載也就能減少金錢(qián)支出。
如何減少流量,最方便的辦法就是用Gzip壓縮,這個(gè)apache的gzip壓縮是靠一個(gè)叫做zlib的類(lèi)庫(kù)和gzip的模塊(mod_gzip.c)完成的,這玩意專(zhuān)門(mén)有一幫牛人研究,因?yàn)間zip本身就大名鼎鼎的,并且具有高壓縮率開(kāi)源的壓縮原理,所以我們的開(kāi)源apache才會(huì)采用這種開(kāi)源的壓縮技術(shù)。
恩,這個(gè).htaccess也是apache的一個(gè)牛比東西,太強(qiáng)大了,也是根據(jù)你的apache安裝了什么模塊而決定你這個(gè)文件里面可以寫(xiě)什么東西,比如你安裝了URL重寫(xiě)模塊(Module mod_rewrite.c)的話你就可以寫(xiě)一些URL重寫(xiě)代碼來(lái)實(shí)現(xiàn)你的文件重寫(xiě)。
知識(shí)普及完畢。。。。
進(jìn)入正題。
如何讓自己的全站的真實(shí)的靜態(tài)的html文件,變成gzip傳輸?shù)哪兀?
為了理解方便,我給大家寫(xiě)了一個(gè)簡(jiǎn)單的php程序。
首先我們建立一個(gè)采用gzip壓縮算法的l.php,在該文件中讀入xxx.html并顯示出來(lái),然后再在.htaccess里面重寫(xiě)xxx.html到1.php就可以了。簡(jiǎn)單吧。由于我們的服務(wù)器認(rèn)為.htaccess的優(yōu)先級(jí)最高,所以訪問(wèn)xxx.html的時(shí)候沒(méi)有訪問(wèn)到這個(gè)靜態(tài)文件,反而訪問(wèn)到了1.php.
下面是我的代碼:(讀入index2.html,然后重寫(xiě)之)
.htaccess:
# 將 RewriteEngine 模式打開(kāi)
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;
?>
實(shí)際上這個(gè)東西能用更好的方法解決,就是用這個(gè)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /xxx/xxx.php [L]
但是我還沒(méi)研究出來(lái)怎么處理這個(gè)%{REQUEST_FILENAME},還望高手賜教。
由于九州未來(lái)的服務(wù)器限制流量,那么減少流量負(fù)載也就能減少金錢(qián)支出。
如何減少流量,最方便的辦法就是用Gzip壓縮,這個(gè)apache的gzip壓縮是靠一個(gè)叫做zlib的類(lèi)庫(kù)和gzip的模塊(mod_gzip.c)完成的,這玩意專(zhuān)門(mén)有一幫牛人研究,因?yàn)間zip本身就大名鼎鼎的,并且具有高壓縮率開(kāi)源的壓縮原理,所以我們的開(kāi)源apache才會(huì)采用這種開(kāi)源的壓縮技術(shù)。
恩,這個(gè).htaccess也是apache的一個(gè)牛比東西,太強(qiáng)大了,也是根據(jù)你的apache安裝了什么模塊而決定你這個(gè)文件里面可以寫(xiě)什么東西,比如你安裝了URL重寫(xiě)模塊(Module mod_rewrite.c)的話你就可以寫(xiě)一些URL重寫(xiě)代碼來(lái)實(shí)現(xiàn)你的文件重寫(xiě)。
知識(shí)普及完畢。。。。
進(jìn)入正題。
如何讓自己的全站的真實(shí)的靜態(tài)的html文件,變成gzip傳輸?shù)哪兀?
為了理解方便,我給大家寫(xiě)了一個(gè)簡(jiǎn)單的php程序。
首先我們建立一個(gè)采用gzip壓縮算法的l.php,在該文件中讀入xxx.html并顯示出來(lái),然后再在.htaccess里面重寫(xiě)xxx.html到1.php就可以了。簡(jiǎn)單吧。由于我們的服務(wù)器認(rèn)為.htaccess的優(yōu)先級(jí)最高,所以訪問(wèn)xxx.html的時(shí)候沒(méi)有訪問(wèn)到這個(gè)靜態(tài)文件,反而訪問(wèn)到了1.php.
下面是我的代碼:(讀入index2.html,然后重寫(xiě)之)
.htaccess:
復(fù)制代碼 代碼如下:
# 將 RewriteEngine 模式打開(kāi)
RewriteEngine On
RewriteBase /
RewriteRule index2\.html l.php?fn=index2.html
1.php
復(fù)制代碼 代碼如下:
<?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;
?>
實(shí)際上這個(gè)東西能用更好的方法解決,就是用這個(gè)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /xxx/xxx.php [L]
但是我還沒(méi)研究出來(lái)怎么處理這個(gè)%{REQUEST_FILENAME},還望高手賜教。
相關(guān)文章
PHP判斷是否為空的幾個(gè)函數(shù)對(duì)比
這篇文章主要介紹了PHP判斷是否為空的幾個(gè)函數(shù)對(duì)比,本文講解了gettype()、empty()、is_null()、isset()等幾個(gè)函數(shù)在不同變量下的返回值情況,需要的朋友可以參考下2015-04-04
Discuz! 5.0.0論壇程序中加入一段js代碼,讓會(huì)員點(diǎn)擊下載附件前自動(dòng)彈出提示窗口
Discuz! 5.0.0論壇程序中加入一段js代碼,讓會(huì)員點(diǎn)擊下載附件前自動(dòng)彈出提示窗口...2007-04-04
php+redis實(shí)現(xiàn)消息隊(duì)列功能示例
這篇文章主要介紹了php+redis實(shí)現(xiàn)消息隊(duì)列功能,結(jié)合實(shí)例形式分析了php+redis創(chuàng)建與使用消息隊(duì)列的相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
最新用php獲取谷歌PR值算法,附上php查詢(xún)PR值代碼示例
用php程序怎么獲取谷歌PR值,已經(jīng)有好幾個(gè)人問(wèn)我php查詢(xún)PR值怎么實(shí)現(xiàn)的,于是現(xiàn)在就把php查詢(xún)PR值法算法附上,大家可以直接使用下面的代碼去測(cè)試php查詢(xún)PR值2011-12-12
PHPCrawl爬蟲(chóng)庫(kù)實(shí)現(xiàn)抓取酷狗歌單的方法示例
這篇文章主要介紹了PHPCrawl爬蟲(chóng)庫(kù)實(shí)現(xiàn)抓取酷狗歌單的方法,涉及PHPCrawl爬蟲(chóng)庫(kù)的使用及正則匹配相關(guān)操作技巧,需要的朋友可以參考下2017-12-12

