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

问题描述:

所以我有一个css文件style.css。在同一个目录中我有图像/文件夹。 如何制作压缩style.css文件的脚本,但是从另一个文件夹压缩?PHP - 使用GZIP压缩静态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脚本移动到与样式表相同的目录中吗?

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

与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 
+0

谢谢,我添加了一个文件扩展名检查(只有进一步如果它的CSS或JS) – Alex 2010-09-23 13:22:39