【发布时间】:2026-01-04 07:45:01
【问题描述】:
我有一个名为 main.css.php 的 php 文件,它收集多个 css 文件并将它们输出为一个大 css 文件。它收集的 css 文件数量范围为 1-10。代码是这样的:
header('Content-type: text/css');
header('Cache-Control: max-age=31536000');
ob_start("compress");
function compress($buffer) {
/* remove comments */
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
/* remove tabs, spaces, newlines, etc. */
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
// include css files
foreach ($css_files as $path) {
if (file_exists($path)) {
include_once($path);
}
}
ob_end_flush();
所以我已经对这部分进行了排序,但现在我不确定如何缓存它,如果任何原始 css 文件发生更改,我可以更新缓存。正如this answer 中所建议的那样,我打算这样做:
$cache = "";
foreach ($css_files as $path) {
$cache.= filemtime($path);
}
...
echo "<link rel='stylesheet' href='/css/base.{$cache}.css'>";
但是我不能使用这个 apache 重写规则:
RewriteEngine on
RewriteRule ^(.*)\.[\d]{10}\.(css|js)$ $1.$2 [L]
由于我不确定 $cache 将包含多个 unix 时间戳,因此我不确定它的长度。
总结
我需要将多个 css 文件合并为一个 php 文件,该文件使用 css 标头发送到浏览器。然后我需要正确缓存此文件,但如果任何原始 css 文件发生更改,我可以通过一种方式更新缓存。
对于我正在做的事情的任何建议、建议或更好的方法将不胜感激。
【问题讨论】:
标签: php css http caching auto-versioning