PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2015-01-24信息快讯网
由于九州未来的服务器限制流量,那么减少流量负载也就能减少金钱支出。
如何减少流量,最方便的办法就是用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类(Class)入门教程第1/2页
php download.php实现代码 跳转到下载文件(response.redirect)
php 文件夹删除、php清除缓存程序
php 正则匹配函数体
PHP has encountered an Access Violation at 7C94BD02解决方法
PHP 实现多服务器共享 SESSION 数据
PHP 源代码分析 Zend HashTable详解第1/3页
彻底杜绝PHP的session cookie错误
php_xmlhttp 乱码问题解决方法
php 过滤危险html代码
PHP HTML代码串 截取实现代码
php addslashes 函数详细分析说明
php 正则 过滤html 的超链接
PHP base64+gzinflate压缩编码和解码代码
php对gzip文件或者字符串解压实例参考
PHP中HTTP方式下的Gzip压缩传输方法举偶
php调用mysql存储过程
让PHP支持页面回退的两种方法[转]
浅析PHP水印技术
用PHP的ob_start();控制您的浏览器cache!
谈谈PHP的输入输出流
PHP has encountered an Access Violation
一个PHP操作Access类(PHP+ODBC+Access)
PHP中通过ADODB库实现调用Access数据库之修正版本 原创
PHP中通过ADO调用Access数据库的方法测试不通过
用ADODB来让PHP操作ACCESS数据库的方法
简单的过滤字符串中的HTML标记
ob_start(),ob_start('ob_gzhandler')使用
小偷PHP+Html+缓存
一周学会PHP(视频)Http下载
Apache2 httpd.conf 中文版
PHP读写文件的方法(生成HTML)