我正在使用Minify(https://code.google.com/p/minify/)来压缩和组合~30个css文件和~10个javascript文件。我为这些文件创建了一个组配置,它基本上是一个带有文件名的数组。
像魅力一样工作,除非修改其中一个脚本:浏览器缓存未及时更新。我曾经为每个文件(使用filemtime)获取最后修改的时间戳,以取代浏览器缓存:
$time = '?' . filemtime( $filename );
$output = '<link type="text/css" rel="stylesheet" href="'.$file_path.'?'.$time.'" />';
我可以遍历所有40个文件以获取最新的时间戳,但这是一个非常难看的解决方案。另一种方式是例如有一个crobjob检查它并将时间戳写入文件,然后我可以包括。
在我再次发明轮子之前还有其他方法吗?
答案 0 :(得分:0)
你能不能只添加:
src="path/to/file.css?v=<?php date(dmy); ?>"
答案 1 :(得分:0)
只需获得$file_path
的修改时间......?就个人而言,我有更多合理数量的文件(两个或三个),每个文件都使用mtime
单独缓存。工作得很漂亮。
答案 2 :(得分:0)
我可以建议您一种方法,您需要定义重写规则并实现静态文件加载的处理程序。假设它是assethandler.php
,并且是你的重写规则;
RewriteRule ^nocache/(.*?)$ assethandler.php?f=$1 [QSA,L]
在php中,您可以使用Cache-Control and Expires获取最新文件;
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 01 Jul 1990 05:00:00 GMT"); // past date
readfile('path_to_static_files/' . $_GET['f']);
,你的静态文件请求就像;
<script src="nocache/your.js"/>
简单地说,当您向nocache/filename
发出请求时,这将作为assethandler.php?f=filename
处理,在此处理程序中,缓存始终被禁用,文件内容作为最新内容