gzip压缩命令|gzip压缩传输的几种配置方法

更新时间:2019-06-26    来源:Access    手机版     字体:

【www.bbyears.com--Access】

第一种方案:在.htaccess 中添加

 代码如下

AddHandler application/x-httpd-php .css .html .js

#这是添加你要压缩的类型

php_value auto_prepend_file “/home/a4284418/public_html/gzip.php”

#这是你给这些类型增加一个自动运行的php代码,后面一定要填你空间的绝对地址

gzip.php

 代码如下

ob_start(“ob_gzhandler”);
ob_start(“compress”);
//如果出现css不能解释,只显示网页,请加入下面的红色代码,去掉注释符
/*

$pathinfo = pathinfo($_SERVER[PHP_SELF]);
switch ($pathinfo["extension"]) {
case “css” : header(“Content-type: text/css”);
break;
case “html” : header(“Content-type: text/html”);
break;
case “js” : header(“Content-type: text/javascript”);
break;
default : break;
}
*/
?>

第二种方案 :此种方案是gzip的升级版,可以将gzip的压缩文件缓存下来,避免重复压缩,在.htaccess 中添加

htaccess RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]

 代码如下

// htaccess RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]
//项目根路径
define(‘ABSPATH’, dirname(__FILE__).’/");
//Gzip压缩开关
$cache = true;
//存放gz文件的目录,确保可写
$cachedir = ‘gzip-cache/’;
if (!is_dir(ABSPATH.$cachedir))
{
mkdir(ABSPATH.$cachedir);
}
//判断是否支持gzip
$gzip = strstr($_SERVER["HTTP_ACCEPT_ENCODING"], ‘gzip’);
$deflate = strstr($_SERVER["HTTP_ACCEPT_ENCODING"], ‘deflate’);
//看浏览器是否支持gzip 否则就是 deflate,再就是 none
$encoding = $gzip ? ‘gzip’ : ($deflate ? ‘deflate’ : ‘none’);
if(!isset($_SERVER["QUERY_STRING"])) exit();
//$key=array_shift(explode(‘?’, $_SERVER["QUERY_STRING"]));
//$key=str_replace(‘../’,”,$key);
$key =basename($_SERVER["QUERY_STRING"]);
//文件的绝对路径
$filename=ABSPATH.$_SERVER["QUERY_STRING"];
$symbol=’^";
$rel_path=str_replace(ABSPATH,”,dirname($filename));
$namespace=str_replace(‘/’,$symbol,$rel_path);
$cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).’.gz’;//生成gz文件路径
$type=”Content-type: text/html”; //默认的类型信息
$pathInfo = pathinfo($filename);
//根据后缀判断文件类型信息
$ext = $pathInfo["extension"];
switch ($ext){
case ‘css’:
$type=”Content-type: text/css”;
break;
case ‘js’:
$type=”Content-type: text/javascript”;
break;
default:
exit();
}
if($cache)
{
if(file_exists($cache_filename))
{
//假如存在gz文件
$mtime = filemtime($cache_filename);
$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
//读取gz文件输出
$content = file_get_contents($cache_filename);
header(“Last-Modified:” . $gmt_mtime);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Normal Respond (Gzip)”);
header(“Content-Encoding: gzip”);
echo $content;
}else if(file_exists($filename))
{
//没有对应的gz文件
$mtime = mktime();
$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
$content = file_get_contents($filename);//读取文件
$content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//压缩文件内容
header(“Last-Modified:” . $gmt_mtime);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Build Gzip File (Gzip)”);
header (“Content-Encoding: ” . $encoding);
header (‘Content-Length: ‘ . strlen($content));
if ($fp = fopen($cache_filename, ‘w’))
{
//写入gz文件,供下次使用
fwrite($fp, $content);
fclose($fp);
}
echo $content;

}else{
header(“HTTP/1.0 404 Not Found”);
}
}else
{ //处理不使用Gzip模式下的输出。原理基本同上
if(file_exists($filename))
{
$mtime = filemtime($filename);
$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
header(“Last-Modified:” . $gmt_mtime);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Normal Respond”);
$content = readfile($filename);
echo $content;
}else
{
header(“HTTP/1.0 404 Not Found”);
}
}

?>

第三种方案 :直接修改服务器环境

1,httpd.conf修改
LoadModule headers_module modules/mod_headers.so 开启
LoadModule deflate_module modules/mod_deflate.so 添加

2,Apache2.2\conf\extra\httpd-vhosts.conf 的默认虚拟主机里加

 代码如下


SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary

例子:


DocumentRoot ‘D:/xampp/htdocs/wmt’
ServerName 127.0.0.3
DirectoryIndex index.php index.html

Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order Allow,Deny
Allow from all


SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary

nginx gzip压缩

nginx 配置gzip段如下:

 代码如下 gzip on;
gzip_min_length 1k;
gzip_buffers 16 64k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

Nginx的压缩输出有一组gzip压缩指令来实现。相关指令位于http{….}两个大括号之间。

gzip on;
//该指令用于开启或关闭gzip模块(on/off)

gzip_min_length 1k;
//设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。

gzip_buffers 4 16k;
//设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。

gzip_http_version 1.1;
//识别http的协议版本(1.0/1.1)

gzip_comp_level 2;
//gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

gzip_types text/plain application/x-javascript text/css application/xml
//匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。
gzip_vary on;
//和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩

apache gzip压缩

 代码如下

LoadModule deflate_module modules/mod_deflate.so

SetOutputFilter DEFLATE
DeflateCompressionLevel 9
AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html

本文来源:http://www.bbyears.com/shujuku/55394.html