PHP - 发送gzip压缩的JS / CSS

时间:2010-11-15 22:20:40

标签: php javascript css gzip

我使用以下代码创建了一个style.css.php文件:

<?php

  $gzip = (ob_get_length() === false && !ini_get("zlib.output_compression") && ini_get("output_handler") != "ob_gzhandler" && extension_loaded("zlib") && substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && !headers_sent());

  if(!$gzip) header('Location: style.css');

  header('Content-type: text/css');
  header('Cache-Control: no-cache');
  header('Expires: Mon, 1 Jan 1901 04:20:00 GMT');

  ob_start('ob_gzhandler');

  include "style.css";
?>
你怎么看?这是压缩js / css文件的好方法吗?有一个更好的方法吗? 我正在为一个公共应用程序这样做。任何人都可以下载。因此,在禁用gzip的共享主机上会有​​人

5 个答案:

答案 0 :(得分:10)

不,不行。那里有很多错误。包括,重定向后没有死亡,没有考虑放气方法,......

使用PHP非常简单,因为zlib输出处理程序会自动检测发送给客户端的相应压缩(如果有的话);你所要做的就是启用它:

<?php
if (extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler")) {
    ini_set("zlib.output_compression", 1);
}

readfile('style.css');

答案 1 :(得分:3)

如果您使用Apache为站点提供服务,则可以使用mod_gzip或mod_deflate。它们通常在共享主机上可用,并且可以在.htaccess文件中配置。

将以下行添加到.htaccess文件中:

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

(即每个哑剧型一个)

答案 2 :(得分:2)

如果配置正确,服务器应该自动执行此操作。

答案 3 :(得分:2)

Adam处于正确的轨道上,但每行不需要一个MIME类型。有关AddOutputFilterByType directive的更多信息,请参阅Apache2手册。

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript text/javascript-x application/javascript

答案 4 :(得分:0)

首先在'.htaccess'中设置

RewriteEngine on
RewriteRule style.css style.css.php
<IfModule mod_deflate.c>
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
SetOutputFilter DEFLATE

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch MSI[E] !no-gzip !gzip-only-text/html

SetEnvIfNoCase Request_URI 
.(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>

推荐创建css文件夹并将文件放在那里。

使用RewriteRule,您不需要设置header('Content-type: text/css'); 和其他函数在php进程之前在服务器上设置gzip。代码 现在跑得更快!