由于又被迫先暂时搬回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");
//如果出现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; }
*/
?>
好了,完工,就这么简单,你什么都不用懂,就可以压缩这四种静态文件了,而且它还是边下载,边解释。
如图:
第一个始主页,第二个是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=$_GET['file']; switch ($_GET['type']){ case 'css': header("Content-type: text/css"); break; case 'js' : header("Content-type: text/javascript"); break; } include($file); ?>
好了现在就可以自动压缩js,html,和css文件了
2012年9月2日Update:做公司网站的时候发现cpnel空间的mod_DEFLATE网站优化工具没了没有了,只有php和html页面才压缩输出,css和js不会压缩,于是用上面得方法在.htaccess里写php_value,添加压缩文件,发现网站500错误,查看错误日志,显示为”command ‘php_value’, perhaps misspelled or defined by a module not included in the server configuratio”,原来空间禁止在.htaccess里写php_value,解决的办法是在相应的目录添加一个php_ini文件,在里面写,如把php_value zlib.output_compression 2048换成zlib.output_compression=2048,然而用php_ini有一个坏处,就是只能在当前目录里起作用,在当前目录的子目录里就会失去作用,php_ini里写一些值,分别在当前目录和子目录里查一下phpinfo(),就明白了,可是css文件和js文件分散在很多文件夹里,所以决定不用php_ini文件,在.htaccess用RewriteRule来加载用来压缩js和css的php文件,以前写的还不算完美,有限制,下面的方法应该没什么限制,算是比较完美了,原理和以前的差不多,只是融合了以上两种方法,具体流程如下图,图片是修改自这里的:
首先,更改.htaccess,添加下面内容
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f #这里用的是相对路径,gzip.php与.htaccess在同以文件夹内 #代码的意思是正则式判断js和css结尾文件,并把文件名和类型传给gzip.php文件 #如果你的html和php没有默认压缩,(js|css)改为(php|html|js|css) RewriteRule ^(.*)(js|css)$ gzip.php?file=$1$2&type=$2 [L]
然后,在.htaccess同文件夹下新建gzip.php文件,在里面添加如下代码:
<?php ob_start("ob_gzhandler"); ob_start("compress"); $file=$_GET['file']; switch ($_GET['type']){ case 'css': header_remove("Expires"); header_remove("Last-Modified"); header("Cache-Control: max-age=15360000"); header("Content-type: text/css"); break; case 'js' : header_remove("Expires"); header_remove("Last-Modified"); header("Cache-Control: max-age=315360000"); header("Content-type: text/javascript"); break; } include($file); ?<
哇噻,这么实用的文章居然没人顶耶,找了好久终于找到一个简单实用的方法啦,谢谢鸟~
我靠,居然没有显示发表按钮,又不能 Ctrl+Enter ,瞎点就发送鸟,欧耶。
难怪没人评论,- -。
图片被贵国屏蔽了,所以没有按钮。家里猫也坏了,所以没有弄
在Chrome下一片黑~
我的正常啊,可能我ghs的ip部分地区无法访问
刚好我的是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选项,空间会恢复到初始状态(一定要先备份),这时应该就可以编辑了
有空我试试看~谢谢了啊
不过,wp supper cache 插件却可以往里边写入信息,奇怪了~
ps.这两个全开没问题吧。效果加强?
可能是权限问题吧,现在很少用这个空间了
我没用过wp supper cache,我一直用的是cos-html-cache,wp supper cache好象有一个gzip选项,你根据需要选一个就好
刚好用的也是000webhost的空间,试了很多方法,还是你这个最实用,顶顶~
不知道为什么 我用的000webhost 使用这个后 出现
Warning: include() [function.include]: Failed opening ” for inclusion (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in /home/a5210423/public_html/gzip.php on line 11
不知道楼主是否知道原因?
不应该啊,.htaccess里的RewriteRule是改写css和js访问路径,例如访问/example.css自动变成gzip.php?file=example.css&type=css,只有?后面不存在file时才会报这种错误吧(例如你直接访问gzip.php就会出现你提到的警告)
是不是.htaccess里有php_value auto_prepend_file,导致访问php时加载gzip.php,有的话去掉
好像不是很好用,我用的zen cart, page speed 一样提示stylesheet.css没有压缩,而且这个文件好像读不出来了,页面格式错乱.
很多空间的不同设置会导致css虽然被压缩,但可能不被解释,例如我现在用的空间,用的压缩方法是/post/48_gzip-compress.html里的方法,基本上这个post加上上面这个链接里的几种方法,在我遇到的空间里,总有一个可以成功
太帅了你!
按照你 Update:……下面的做法。我这个出现了这个错误:Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
何解?
是不是文件的权限问题,现在很多免费主机都限制使用压缩功能,如果这篇文章里的方法没效,基本上可以不用倒腾压缩了,否则要么会报错要么会网页错误。
免费主机超级浪费时间,现在收费的主机很便宜,推荐东哥的homezz.com一年也就100块。