北极寒流 » 网络资源 » wordpress网站完美开启gzip压缩的方法 - 2012.03.26

wordpress网站完美开启gzip压缩的方法

大家都知道,如果网页开启了gzip压缩,那么就可以有效的缩短网站打开速度,增加网站对用户的友好度。所以这段时间本人一直在寻找wordpress完美开启Gzip压缩的方法。下面就给大家分享收集的几个完美开启网站Gzip压缩的方法:

网站完美开启gzip压缩方法1:通过.htaccess终极启用方法(推荐此方法)

1、把下面的代码另存为“gzip.php”,然后上传至网站根目录。

<?php
define('ABSPATH', dirname(__FILE__).'/');
$cache = true;//Gzip压缩开关
$cachedir = 'wp-cache/';//存放gz文件的目录,确保可写
$gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');
$deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate');
$encoding = $gzip ? 'gzip' : ($deflate ? 'deflate' : 'none');
if(!isset($_SERVER['QUERY_STRING'])) exit();
$key=array_shift(explode('?', $_SERVER['QUERY_STRING']));
$key=str_replace('../','',$key);
$filename=ABSPATH.$key;
$symbol='^';
$rel_path=str_replace(ABSPATH,'',dirname($filename));
$namespace=str_replace('/',$symbol,$rel_path);
//$cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).'.gz';//生成gz文件路径
$cache_filename=$filename.'.gz';//生成gz文件路径

$type="Content-type: text/html"; //默认的类型信息
$ext = array_pop(explode('.', $filename));//根据后缀判断文件类型信息
    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';
        if( (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
              array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) ==  $gmt_mtime)
            ){
            // 浏览器cache中的文件修改日期是否一致,将返回304
            header ("HTTP/1.1 304 Not Modified");
            header("Expires: ");
            header("Cache-Control: ");
            header("Pragma: ");
            header($type);
            header("Tips: Cache Not Modified (Gzip)");
            header ('Content-Length: 0');
        }else{
            //读取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));
        echo $content;
        if ($fp = fopen($cache_filename, 'w')) {//写入gz文件,供下次使用
                fwrite($fp, $content);
                fclose($fp);
            }
    }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';
        if( (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
        array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) ==  $gmt_mtime)
        ){
        header ("HTTP/1.1 304 Not Modified");
        header("Expires: ");
        header("Cache-Control: ");
        header("Pragma: ");
        header($type);
        header("Tips: Cache Not Modified");
        header ('Content-Length: 0');
    }else{
        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");
    }
}
?>

2、修改根目录的.htaccess,加入以下代码,增加gz的识别支援及网址改写:

#识别gz格式的文件支持
<Files *.js.gz>
AddEncoding gzip .js
ForceType application/x-javascript
</Files>
<Files *.css.gz>
AddEncoding gzip .css
ForceType text/css
</Files><IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#wordpress静态网址,如果沒有使用,就略过
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
#读到css和js文件时,就重定向到对应的gzip.php
RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]
#读到.css时,判断如果浏览器支持Gzip压缩且.css.gz文件存在,就重定向到压缩的CSS文件
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*).css $1.css.gz [L,QSA]
#读到.js,判断如果浏览器支持Gzip且.js.gz文件存在,就重定向到压缩的JS文件
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*).js $1.js.gz [L,QSA]
</IfModule>

3、浏览自己的网站,让CSS和JS产生gz档,并将相应的.gz文件权限设置为777。

4、最后,再次改写.htaccess,把以下代码注释掉或删除。

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

完毕。此Gzip方法是至今我最满意的,效果最显著的,强烈推荐。不过在修改CSS和JS后,还要还原那句代码并重做第3、4步。所以该方法稍有些复杂,比较适合喜欢折腾Wordpress的童鞋们。

网站完美开启gzip压缩方法2:使用Wordpress插件Gzippy

WordPress插件Gzippy,很方便的开启Gzip压缩功能,安装之后启用即可,无需设置,很方便.

下载地址:http://wordpress.org/extend/plugins/gzippy/

网站完美开启gzip压缩方法3:使用自定义的php.ini和.htaccess文件

a. 新建一个文本文件,重命名为 php.ini ,输入以下内容,保存并上传至网站根目录即可。

output_buffering = Off
output_handler =
zlib.output_compression = On
zlib.output_compression_level = 6

b.网站根目录下的.htaccess文件内加入以下代码(独占一行):

addhandler x-httpd-php5-cgi .php .html .htm .js

网站完美开启gzip压缩方法4:修改代码压缩CSS和JS文件

a.压缩CSS文件

1、把模板目录下的style.css复制一份出来,命名为style.css.php,接着在style.css.php顶部加入这句:

< ?php if(extension_loaded('zlib')) {ob_start('ob_gzhandler');} header("Content-type: text/css"); ?>

在最后加上下面代码:

< ?php if(extension_loaded('zlib')) {ob_end_flush();} ?>

然后修改header.php中的引用CSS文件的路径:

原来的:

<link rel="stylesheet" type="text/css" media="screen" href="/style.css"/>

修改后的:

<link rel="stylesheet" type="text/css" media="screen" href="/style.css.php"/>

这样,你的CSS就被Gzip压缩了。

b. 同样的方法可以压缩你的JS. 只是在JS的顶部加入的是如下代码:

< ?php if ( extension_loaded('zlib') ) {ob_start('ob_gzhandler');} header("Content-Type: text/javascript"); ?>

加入到JS文件最后的代码和CSS文件的一样. 之后再修改主题文件中引用JS文件的路径文件名即可.

提示: 此方法较复杂,不推荐初级用户使用. 并且要记得在修改的时候要把原来的文件备份一下。省的出现悲剧就晚了。

 

以上第2-4开启Gzip压缩的方法,网上传的比较多,但是有一点,都不兼容IE6,所以你如果要兼顾IE6的话,那推荐你用第一种方法,因为第一种是兼容IE6的gzip压缩方法:

目前网上流传的这4个完美开启网站Gzip压缩的方法,收集于此,根据网站空间的功能可能不是每种方法都支持,具体可以尝试不同的方法找到适合自己的。

资料来源:http://luckerme.com/archives/898.html

26

wordpress网站完美开启gzip压缩的方法

分享到:

最受欢迎的