PHP - 使用GZIP压缩静态css文件

时间:2010-09-23 11:44:10

标签: php html css compression gzip

所以我有一个css文件,style.css。在同一目录中我有images /文件夹。 如何制作压缩style.css的脚本,但是从另一个文件夹?

现在我有这个:

<?php
  if(isset($_GET['css'])) $file = array('url' => htmlspecialchars($_GET['css']), 'type' => 'text/css');
  if(isset($_GET['js'])) $file = array('url' => htmlspecialchars($_GET['js']), 'type' => 'application/javascript');
  if(!isset($file)) exit();

  header('Content-type: '.$file['type']);
  header('Cache-Control: max-age='.(60*60*6).', must-revalidate');  

  // whitespace+comment removal, in case gzip is off
  function compress($buffer){
    global $file;
    $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
    $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), ' ', $buffer);
    return $buffer;
  }

  if(extension_loaded('zlib'))
    if(substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler");

  else ob_start("compress");

  include($file['url']);    
  ob_end_flush();
?>

使用类似这样的东西:

<style type="text/css">
 @import "http://mysite.com/lib/c.php?css=../style.css";
</style>

除了css文件中的图像路径不再起作用外,一切正常。 我认为这是因为(images / bg.jpg)变成了(../ images / bg.jpg)

我可以解决这个问题,而不必将我的c.php脚本移动到与样式表相同的目录中吗?

1 个答案:

答案 0 :(得分:3)

如果您的网络服务器具有此功能,您可以使用网址重写来保持整洁。

mod_rewrite的一个例子:

RewriteRule ^images/style\.css$ lib/c.php?css=../style.css

然后,你可以简单地说:

@import "http://mysite.com/images/style.css";

我还建议您再次查看脚本。如果我加载此网址会怎样?

http://mysite.com/lib/c.php?css=.htpasswd