所以我一直在使用Minify来压缩我的JS和CSS,直到我需要压缩一些动态的php样式表,这些都很顺利。
我尝试使用htaccess来欺骗它以为它是一个css文件,但我意识到它使用的绝对文件路径不会受到mod_rewrite的影响
无论何时,只要我将它指向一个php文件,它总会返回'400 Bad Request'。除了编写自己的压缩脚本之外,还有任何关于如何解决这个问题的想法吗?
答案 0 :(得分:7)
我发现处理缩小和压缩样式表的最佳方法是自己动手。看看这段代码:
<?php
header("Content-Type: text/css");
header("Last-Modified: ".gmdate('D, d M Y H:i:s', filemtime($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']))." GMT");
header("Expires: ".gmdate('D, d M Y H:i:s', (filemtime($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']) + 691200))." GMT");
//This GZIPs the CSS for transmission to the user
//making file size smaller and transfer rate quicker
ob_start("ob_gzhandler");
ob_start("compress");
//Function for compressing the CSS as tightly as possible
function compress($buffer) {
//Remove CSS comments
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
//Remove tabs, spaces, newlines, etc.
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
//Main style
require_once($_SERVER['DOCUMENT_ROOT']."/templates/style/style.css");
//Other style
if($php_variable) {
require_once($_SERVER['DOCUMENT_ROOT']."/templates/style/other.css");
}
ob_end_flush();
ob_end_flush();
?>
这里有很多事情要发生,所以让我解释一下。
标题
Last-Modified
和Expires
标题(稍微超过一周设置,您可以更改此设置)。缩小和GZIP
ob_start
,我们告诉GZIP此文件以及运行自定义函数compress
。compress
会删除所有CSS注释和空白区域。这意味着您可以在源文件中保留所有注释和间距,以便于编辑,但只能将最低限度的内容发送到浏览器。风格
require
导入样式表。为你想要的多种样式表做这件事;它们都将通过单个HTTP请求传递给用户。使用新文件
您将像普通的CSS文件一样调用该文件。
<style type="text/css" src="/path/to/css-script.php"></style>
结论
使用这种方法,你可以做几件很棒的事情。
@import
语句......这本身就很棒。你也可以对JavaScript使用相同的方法,虽然上面的compress
函数严格用于CSS,所以我会省略它。
将此技术与此缓存控制技术结合使用,您已经构建了一个非常棒的CSS / JS处理程序:How to force browser to reload cached CSS/JS files?