终极gzip压缩css、js、html、php语法

February 13th, 2009, Posted by: agon   

由于又被迫先暂时搬回000webhost,而这里没有mod_DEFLATE模块,再找以前压缩的时候琢磨出来的,以前还没见到过,超级简单,不超过10行短代码,就能解决各类静态网页文件的压缩问题,而且各个浏览器显示正常。

关于这个话题,很多人都写过了,最早是看阅微堂的教程很受启发,后来发现,我用起来rp很差,不是php动态网页不能压缩,就是css不显示,不能方便的按各种类型统一设置缓存,后来我用zlib的方法解决了以上问题,并且解决了firefox不显示css的问题,可是用zlib又有个坏处,就是必须等网页下载完之后,才开始解释,初次载入感稍差,mod_DEFLATE模块可以便下载边解释。
好了不说废话了,放代码,我以这个000webhost空间为例,首先编辑.htaccess,在里面添加两行代码:

AddHandler application/x-httpd-php .css .html .js
#这是添加你要压缩的类型
php_value auto_prepend_file "/home/a4284418/public_html/gzip.php"
#这是你给这些类型增加一个自动运行的php代码,后面一定要填你空间的绝对地址

然后在你指定的地址新建一个gzip.php,在里面加上如下代码:

<?php
ob_start("ob_gzhandler");
ob_start("compress");
?>

好了,完工,就这么简单,你什么都不用懂,就可以压缩这四种静态文件了,而且它还是边下载,边解释。
如图:gzip
第一个始主页,第二个是css,两个同时下载,要是zlib的话,第一个下完,后边的才开始下。

另外说一句使用mod_DEFLATE压缩的人,肯能有的空间js无法压缩,建议用以下语法:

<FilesMatch "\\.(js|css|html|htm|php|xml)tiny_mce_markerquot;>
SetOutputFilter DEFLATE
</FilesMatch>

这个方法目前来看非常圆满,ie6,K-meleon,opera,firefox均显示正常。

Update:提供另一种便捷方法,有的免费主机上可能不让用AddHandler,例如000webhost,你一用就会在网页后面插入一段analysis代码,如果网页中有动态返回结果,每个返回结果都插了这一段分析代码,引起一连串错误。
好了下面说方法:
首先,更改.htaccess,添加下面内容

#打开zlib压缩输出,自动压缩html,php文件
php_value zlib.output_compression 2048
#设置css和js文件压缩
<IfModule mod_rewrite.c>
RewriteEngine On
#下面是你要压缩目录的路径,这里为当前
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f
#下面是gzip.php文件压缩js和css文件,注意gzip.php文件位置
RewriteRule ^(.*)(js|css)$ /gzip.php?file=$1$2&type=$2 [L]
</IfModule>

创建gzip.php文件,位置与你在.htaccess里设置的相同,添加如下内容:

<?php
$file=$_REQUEST['file'];

switch ($_REQUEST['type']){
case 'css':
header("Content-type: text/css");
break;
case 'js' :
header("Content-type: text/javascript");
break;
}
include($file);
?>

好了现在就可以自动压缩js,html,和css文件了

10 条回复

添加你的回复

  1. 哇噻,这么实用的文章居然没人顶耶,找了好久终于找到一个简单实用的方法啦,谢谢鸟~

  2. 我靠,居然没有显示发表按钮,又不能 Ctrl+Enter ,瞎点就发送鸟,欧耶。

    难怪没人评论,- -。

    • 图片被贵国屏蔽了,所以没有按钮。家里猫也坏了,所以没有弄

  3. 在Chrome下一片黑~

  4. 我的正常啊,可能我ghs的ip部分地区无法访问

  5. 刚好我的是000webhost的。
    这个方法很简单啊~
    不过我修改htaccess时老是提示
    “Warning: ftp_put() [function.ftp-put]: Can’t open that file: Permission denied in/home/files/public_html/includes/filesystem.inc.phpon line1367”
    请教一下~
    谢谢

    • 是不是也不能删除,备份网站之后,点控制面板的Cleanup / Reload Account选项,空间会恢复到初始状态(一定要先备份),这时应该就可以编辑了

  6. 有空我试试看~谢谢了啊
    不过,wp supper cache 插件却可以往里边写入信息,奇怪了~
    ps.这两个全开没问题吧。效果加强?

    • 可能是权限问题吧,现在很少用这个空间了
      我没用过wp supper cache,我一直用的是cos-html-cache,wp supper cache好象有一个gzip选项,你根据需要选一个就好

  7. 刚好用的也是000webhost的空间,试了很多方法,还是你这个最实用,顶顶~

你的回复