所以我一直在使用Minify来压缩我的JS和CSS,它们都很好,直到我需要压缩一些动态的php样式表。缩小动态php样式表
我试图用htaccess的将它误以为它是一个CSS文件,但后来我意识到它使用了不会被mod_rewrite的
来实现绝对文件路径,反正只要我点它在一个PHP文件,它总是返回'400错误请求'。除了编写我自己的压缩脚本之外,如何解决这个问题的任何想法?
所以我一直在使用Minify来压缩我的JS和CSS,它们都很好,直到我需要压缩一些动态的php样式表。缩小动态php样式表
我试图用htaccess的将它误以为它是一个CSS文件,但后来我意识到它使用了不会被mod_rewrite的
来实现绝对文件路径,反正只要我点它在一个PHP文件,它总是返回'400错误请求'。除了编写我自己的压缩脚本之外,如何解决这个问题的任何想法?
我发现处理缩小和压缩样式表的最好方法就是自己动手。看看这个代码:
<?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
声明......这本身就非常棒。虽然上面的compress
函数严格用于CSS,所以我会省略它,但您也可以对JavaScript使用相同的方法。
使用此技术在这个高速缓存控制技术相结合,并且你已经建立了自己的真棒CSS/JS处理程序:How to force browser to reload cached CSS/JS files?
什么是动态的,PHP的样式? –
所以你想使用一个与平面文件一起工作的工具来压缩动态创建的东西。这听起来有点不对..你不可能? :) –
我将这添加为注释,因为它是在黑暗中刺:尝试制作一个静态css文件,然后在那里包括动态的与@import语句,然后缩小静态。如果它有效,让我知道我会将它添加为答案;)顺便说一句,我知道你应该避免@import,但嘿。 – picus