如何启用gzip?

时间:2011-01-17 00:32:57

标签: php apache .htaccess gzip

我找到了几个关于如何启用gzip的教程,但似乎没有什么对我有用,所以我的问题是如何启用gzip。我在一个共享的Dreamhost托管服务器上,它正在运行PHP版本5.2和Apache,从我发现这行的php信息,也许这可能有帮助吗?

zlib

ZLib Support    enabled
Stream Wrapper support  compress.zlib://
Stream Filter support   zlib.inflate, zlib.deflate
Compiled Version    1.2.3.3
Linked Version  1.2.3.3

Directive   Local Value Master Value
zlib.output_compression Off Off
zlib.output_compression_level   -1  -1
zlib.output_handler no value    no value

我也找到了这一行

_SERVER["HTTP_ACCEPT_ENCODING"] gzip, deflate

我不知道这与它有什么关系。但这是我的第一个问题,其次,我有dropbox,托管一个javscript文件,我想知道是否有可能将该文件gzipped,它没有被转移压缩,所以有没有办法这样做?

6 个答案:

答案 0 :(得分:50)

您是否尝试过使用ob_gzhandler?

php manual

<?php
ob_start("ob_gzhandler");
?>
<html>
<body>
<p>This should be a compressed page.</p>
</html>
<body>

提示:有时检测网络是否发送压缩是非常棘手的,我使用firefox的firebug插件,我测试了一个没有压缩和压缩的php文件并比较了大小,在我的情况下,差异是1mb(非压缩)和56kb压缩。

或者在.htaccess中

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css         application/x-javascript application/javascript
</IfModule>

答案 1 :(得分:6)

在Dreamhost的官方维基中,他们通过modifying an htaccess启用此功能:

<IfModule mod_gzip.c>
    mod_gzip_on       Yes
    mod_gzip_dechunk  Yes
    mod_gzip_item_include file      \.(html?|txt|css|js|php|pl|jpg|png|gif)$
    mod_gzip_item_include handler   ^cgi-script$
    mod_gzip_item_include mime      ^text/.*
    mod_gzip_item_include mime      ^application/x-javascript.*
    mod_gzip_item_exclude mime      ^image/.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
  

这基本上会检查是否找到了mod_czip.c,如果是,它会为你压缩文件,以便更快地发送到浏览器。这可能会加快下载时间35-40%,然后文件大小应该降低到55-65%。

通过在Google上快速搜索,您可以在thread on Stackoverflow网站上找到解决此问题的其他third party个。

答案 2 :(得分:5)

在Apache中,启用输出压缩非常简单。将以下内容添加到.htaccess文件中:

# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

# Or, compress certain file types by extension:
<files *.html>
SetOutputFilter DEFLATE
</files>

来源:http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/

答案 3 :(得分:5)

我需要做的就是在Apache级别启用编码

zlib.output_compression = 1 // the PHP.ini file

这将使服务器执行必要的请求标头检查,压缩,发送相关标头

您也可以在ob_start()

之前在PHP文件中执行此操作
ini_set("zlib.output_compression", 1);

要使Apache压缩静态资源(例如:.js文件,.css文件),请按照Kamlesh的回答进行操作

答案 4 :(得分:3)

##首先,您必须在WHM(服务器)设置中进行更改才能启用Gzip。之后,在cPanel设置##

中进行更改
  
      
  1. 对于WHM设置=&gt; Easy Apache =&gt;穷举选项列表&lt;这里启用 - deflate 标签&gt;

  2.   
  3. 对于cPanel设置=&gt;软件/服务=&gt;优化网站&lt;在这里选择你想要的选项&gt;

  4.   

答案 5 :(得分:1)

压缩可以通过两种方式完成。

  

Apache实际上有两种压缩选项:

     
      
  • mod_deflate 更容易设置并且是标准的。
  •   
  • mod_gzip 似乎更强大:您可以预压缩内容。
  •   
     

Deflate快速且有效,所以我使用它;如果漂浮你的船,使用mod_gzip。在任何一种情况下,Apache都会检查浏览器是否发送了“Accept-encoding”标头并返回该文件的压缩版或常规版。但是,一些较旧的浏览器可能会遇到问题(更多信息如下),并且您可以添加特殊指令来纠正此问题。

     

如果您无法更改.htaccess文件,则可以使用PHP返回压缩内容。为您的HTML文件添加.php扩展名,并将此代码添加到顶部:

     

在PHP中:

<?php if (substr_count($_SERVER[‘HTTP_ACCEPT_ENCODING’], ‘gzip’))
ob_start(“ob_gzhandler”); else ob_start(); ?>
     

我们检查“Accept-encoding”标头并返回该文件的gzip压缩版本(否则为常规版本)。这几乎就像建立自己的网络服务器(有趣!)。但实际上,如果可以帮助它,请尝试使用Apache压缩输出。你不想愚弄你的文件。

参考:http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/