缩小动态php样式表

Hor*_*rse 3 css php dynamic stylesheet minify

所以我一直在使用Minify来压缩我的JS和CSS,这些都很好,直到我需要压缩一些动态的php样式表.

我试图使用htaccess来欺骗它以为它是一个css文件,但我意识到它使用的绝对文件路径不会受到mod_rewrite的影响

无论如何,每当我指向一个php文件时,它总是返回'400 Bad Request'.除了编写自己的压缩脚本之外,还有任何想法可以解决这个问题吗?

Mic*_*yen 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();
?>
Run Code Online (Sandbox Code Playgroud)

这里有很多事情,所以让我解释一下.

  • 将文件类型设置为CSS.
  • 设置缓存控制的标题Last-ModifiedExpires标题(稍微超过一周设置,您可以更改此设置).

Minify和GZIP

  • 使用ob_start,我们告诉它GZIP这个文件以及运行自定义函数compress.
  • compress发送到浏览器时删除所有CSS注释和空白区域.这意味着您可以在源文件中保留所有注释和间距,以便于编辑,但只能将最低限度的内容发送到浏览器.

样式

  • 使用require导入的样式表.为你想要的多种样式表做这件事; 它们都会在一个HTTP请求中传递给用户.

使用您的新文件

你将像普通的CSS文件一样调用文件.

<style type="text/css" src="/path/to/css-script.php"></style>
Run Code Online (Sandbox Code Playgroud)

结论

使用这种方法,你做了几件很棒的事情.

  • 为缓存提供正确的标头,快速回访您的网站.
  • Minifys所有内容不包含额外的空格或注释.
  • 使用GZIP压缩文件以获得较小的文件大小.
  • 在一个HTTP请求中包含所有样式表,非常适合优化.
  • 避免使用@import语句......这本身就很棒.
  • 允许您保留多个样式表并使用PHP逻辑包含或不包含它们.
  • 允许您根据需要保持源样式表的间隔和注释,而不会对访问者产生任何影响.

您也可以对JavaScript使用相同的方法,虽然compress上面的函数严格用于CSS,所以我会省略它.

将此技术与此缓存控制技术结合使用,您已经构建了一个非常棒的CSS/JS处理程序:如何强制浏览器重新加载缓存的CSS/JS文件?