10

編集:心からお詫びします!これは私以外の問題ではありませんでした。正しいものが含まれているglobal.cssファイルがありましたが、その下に<head>、HTMLの一部に古いCSSが含まれている別のファイルが含まれていました。Facepalm。

開発中のサイトがあります。私はLESSを使用してCSSを拡張し、書きやすくしています。問題は、.lessファイルを変更すると、ブラウザでレンダリングされたスタイルが変更されないことです。生成されたファイルを調べたところ.css、加えられた変更を反映するように更新されましたが、ブラウザーはCSSファイルからレンダリングされたスタイルを更新しません。Chrome、FF(3および4)、Operaでこれを試しましたが、同じ非更新の結果が得られました。

PHPとメタタグの両方で何もキャッシュしないようにブラウザに指示したこともあります。複数のローカルホストを使用していますが、Apache構成ファイルはほとんどバニラです(これはローカルサーバーです)。LESSをCSSに変換するために使用されるコードを以下に示します。これは、ページがリロードされるたびに実行されます。

try 
{
    lessc::ccompile('global/global.less', 'global/global.css');
} 
catch(exception $ex) 
{
    exit('lessc fatal error:<br />' . $ex->getMessage());
}

ここに例外はありません。パーサーはless.phpファイルが変更されているかどうかをチェックしますが、少し削除しましたが、CSSファイルは変更のたびに再生成されるため、これはブラウザーのキャッシュの問題である必要があります...Apacheは更新されたCSSファイルを提供します結構です:-/

長い間続けて申し訳ありませんが、私は明確にしたかったです。他に何か必要な場合は、私に知らせてください。

4

3 に答える 3

20

コードでタイムスタンプを使用して、リクエストごとにブラウザにファイルcssをダウンロードさせる方法を確認したら、次のようにします。js

<link rel="stylesheet" type="text/css" href="http://www.example.com/style.css?ts=<?=time()?>" />

番号が前の?ts=123456789番号と異なる場合は常に、ブラウザにファイルをリロードさせます。

そこで、このアイデアを採用しましたが、のタイムスタンプの代わりにnow、ファイルの変更のタイムスタンプを使用しますstyle.css。したがって、サーバーで変更されるまでブラウザにキャッシュされます。

<link rel="stylesheet" type="text/css" href="http://www.example.com/style.css?ts=<?=filemtime('style.css')?>" />
于 2011-04-13T12:01:05.423 に答える
1

私はLESSとLaravelを使用していますが、最終的に良い解決策を見つけました。

私の<head>タグには、次のものがあります。

<link rel="stylesheet/less" type="text/css" href="/less/main.less?ts={{FileHelper::getMostRecentModifiedTimeInFolder(realpath(public_path() . '/less'))}}" />

次に、FileHelperクラスも作成しました( https://stackoverflow.com/a/6767411/470749に基づく):

<?php

class FileHelper {

    public static function getMostRecentModifiedTimeInFolder($path)
    {
        //https://stackoverflow.com/a/6767411/470749
        $iterator = new DirectoryIterator($path);
        $mtime = -1;
        foreach ($iterator as $fileinfo) {
            if ($fileinfo->isFile()) {
                if ($fileinfo->getMTime() > $mtime) {
                    $mtime = $fileinfo->getMTime();
                }
            }
        }
        return $mtime;
    }

}

このアプローチをローカル開発サーバーでのみ使用し、本番環境では別のアプローチを使用して、ページが読み込まれるたびにファイルのタイムスタンプを常にチェックするわけではないようにすることもできます。

于 2014-01-24T20:38:32.390 に答える
0

ブラウザのキャッシュを制御できないため、cssファイルにバージョンを指定することをお勧めします。global.1.11.cssのように。

于 2011-04-13T11:51:00.883 に答える