2017-01-12 1 views
0

cssとjsファイルにmd5ハッシュを追加して、ブラウザで長期キャッシュできるようにしたい。PHPのurlにmd5ハッシュファイルを追加する

は、Python Djangoのでは私はビルド時にハッシュを生成するなど、PHPでまったく同じことを行うライブラリを希望https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#std:templatetag-static

これを行うには非常に簡単な方法、静的テンプレートタグがあり、実行時ではありません。

私はSO: hash css and js files to break cache. Is it slow?の古い質問を見ましたが、md5ハッシュを行う方法についての回答は得られませんでしたので、再度尋ねます。

+0

MD5はこれには適していません。単純にmtimeを使うか、本当に内容を気にしているのですが(しかし、なぜコンテンツは変わるのですか?)、CRC32のような非常に安いものを使用します。 – ThiefMaster

+0

@ThiefMaster、MD5 beins slowは、「ビルド時には実行時ではなくハッシュを生成する」と言いましたが、Djangoで行われた方法と同じです – slaweet

答えて

2

PHPでは通常filemtimeを使用します。例:

// $file_url is defined somewhere else 
// and $file_path you'd know as well 

// getting last modified timestamp 
$timestamp = filemtime($file_path); 

// adding cache-busting md5 
$file_url .= '?v=' . md5($timestamp); 

(あなたにも直接$timestampを使用することができます)

あなたはファイルの内容から計算したMD5を持つようにしたい場合は、あなたがmd5_filelinky)を使用して、同じような何かを行うことができます。

// getting the files crc32 
$crc32 = hash_file ('crc32' , $file_path); 

// adding cache-busting string 
$file_url .= '?c=' . $crc32; 
:高速ですCRC32を、使用して
// getting the files md5 
$md5 = md5_file($file_path); 

// adding cache-busting string 
$file_url .= '?m=' . $md5; 

または

大量のファイルや巨大なファイルではそれをしないように注意してください。 (修正すべきではない)修正されていないファイルを常に配備していない限り、タイムスタンプ方法はずっと高速で軽量で、大部分の目的に十分適しています。

+0

提案に感謝しますが、私はmd5 sumをベースにしたいと思いますファイルの内容ではなく、変更された日付です。デプロイ時には、すべてのファイルがサーバーにコピーされるため(タイムスタンプの変更)、すべてが変更されている必要はありません。 – slaweet

+0

@slaweet、更新された回答はあなたを助けますか? – yivi

+0

更新していただきありがとうございます。 CRC32は良い選択のように聞こえる。 – slaweet

関連する問題