0

複数のcssファイルを収集して1つの大きなcssファイルとして出力するmain.css.phpというphpファイルがあります。収集する 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 ファイルのいずれかが変更された場合にキャッシュを更新できる方法でキャッシュする方法がわかりません。この回答で示唆されているように、私は次のようなことをするつもりでした:

$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]

複数のUNIXタイムスタンプが含まれるため、 $cache がどれくらいの長さになるかわかりません。

概要

複数の css ファイルを 1 つの php ファイルに結合し、css ヘッダーを使用してブラウザーに送信する必要があります。次に、このファイルを正しくキャッシュする必要がありましたが、元の css ファイルのいずれかが変更された場合にキャッシュを更新できる方法が必要でした。

私がやっていることについてのアドバイス、提案、またはより良い方法は大歓迎です。

4

2 に答える 2