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

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

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

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 模式打开

RewriteEngineOn

RewriteBase/

RewriteRuleindex2\.html l.php?fn=index2.html

1.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');

}

}

elseif($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');

}

}

}

?>

$rfile=addslashes(dirname(dirname(__FILE__))).'/'.'./httpdocs/'.$_REQUEST['fn'];

echo READ_FILE_CONTENTS($rfile);

functionREAD_FILE_CONTENTS($file)

{

if(!function_exists("file_get_contents"))returnfile_get_contents($file);

$ifile=fopen($file,"r");

$contents=false;

if($ifile)while(!feof($ifile))$contents.=fgets($ifile);

fclose($ifile);

return$contents;

}

?>

// Compress buffered output if required and send to browser

if($do_gzip_compress)

{

/$/Borrowedfromphp.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}, 还望高手赐教

来源: https://www.php1.cn/detail/php-b19eb7afc4.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值