【问题标题】:Append file md5 hash to url in PHP将文件 md5 哈希附加到 PHP 中的 url
【发布时间】:2021-06-24 21:12:21
【问题描述】:

我想将 md5 哈希附加到 css 和 js 文件中,以便能够在浏览器中长期缓存它们。

在 Python Django 中有一个非常简单的方法可以做到这一点,静态模板标签 https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#std:templatetag-static

我想要一个在 PHP 中做同样事情的库,包括在构建时而不是运行时生成哈希。

我在 SO 上看到过同样的问题: hash css and js files to break cache. Is it slow? ,但它从来没有得到关于如何做 md5 哈希的答案,所以我又问了。

【问题讨论】:

  • MD5 不是一个好的选择。只需使用 mtime,或者如果你真的关心内容(为什么内容会改变,但 mtime 却没有?)使用超级便宜的东西,比如 CRC32。
  • @ThiefMaster,MD5 很慢是我提到“在构建时而不是运行时生成哈希”的原因,这样它在 Django 中完成

标签: php web


【解决方案1】:

在 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_file (linky),并执行以下操作:

// getting the files md5
$md5 = md5_file($file_path);

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

或者使用更快的CRC32:

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

// adding cache-busting string
$file_url .= '?c=' . $crc32;

注意不要对大量文件或大型文件执行此操作。除非您不断地部署未修改的文件(您不应该这样做),否则时间戳方法更快更轻,并且足以满足绝大多数目的。

【讨论】:

  • 感谢您的建议,但我希望得到基于文件内容的 md5 总和,而不是修改日期。因为在部署时所有文件都被复制到服务器(更改时间戳),但并非所有文件都必须被修改。
猜你喜欢
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2021-09-03
  • 1970-01-01
  • 2012-07-06
相关资源
最近更新 更多