代码之家  ›  专栏  ›  技术社区  ›  Alex

PHP-发送gzip压缩JS/CSS

  •  7
  • Alex  · 技术社区  · 14 年前

    我用以下代码创建了一个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 回复  |  直到 14 年前
        1
  •  10
  •   Artefacto    14 年前

    不,不好。这里有很多问题。包括,重定向后不死,不考虑放气方法。。。

    使用PHP很简单,因为zlib输出处理程序会自动检测要发送给客户端的适当压缩(如果有的话);您只需启用它:

    <?php
    if (extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler")) {
        ini_set("zlib.output_compression", 1);
    }
    
    readfile('style.css');
    
        2
  •  3
  •   Adam Hopkinson    14 年前

    如果您使用的是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
    

    (即每种mime类型一个)

        3
  •  2
  •   admiral0    14 年前

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

        4
  •  2
  •   Treffynnon    14 年前

    Adam在正确的轨道上,但不需要每行一个MIME类型。有关 AddOutputFilterByType directive .

    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript text/javascript-x application/javascript
    
        5
  •  0
  •   Rogerio de Moraes    10 年前

    第一个设置在“.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。守则 快一点!