Php 在浏览器中强制缓存更新

Php 在浏览器中强制缓存更新,php,browser-cache,minify,Php,Browser Cache,Minify,我正在使用Minify压缩和组合~30个css文件和~10个javascript文件。我已经为这些文件创建了一个组配置,它基本上是一个带有文件名的数组 除了其中一个脚本被修改:浏览器缓存没有及时更新之外,它的工作方式就像一个符咒。我曾经使用filemtime来否决浏览器缓存,从而为每个文件获取最后修改的时间戳: $time = '?' . filemtime( $filename ); $output = '<link type="text/css" rel="stylesheet" hr

我正在使用Minify压缩和组合~30个css文件和~10个javascript文件。我已经为这些文件创建了一个组配置,它基本上是一个带有文件名的数组

除了其中一个脚本被修改:浏览器缓存没有及时更新之外,它的工作方式就像一个符咒。我曾经使用filemtime来否决浏览器缓存,从而为每个文件获取最后修改的时间戳:

$time = '?' . filemtime( $filename );
$output = '<link type="text/css" rel="stylesheet" href="'.$file_path.'?'.$time.'" />';
我可以遍历所有40个文件以获得最新的时间戳,但这是一个非常糟糕的解决方案。另一种方法是让crobjob检查并将时间戳写入文件,然后我可以将其包括在内

在我再次发明轮子之前还有其他方法吗?

你能不能不加上:

src="path/to/file.css?v=<?php date(dmy); ?>"

只需获取$file_路径的修改时间。。。?就我个人而言,我有两到三个更合理数量的文件,每个文件都单独缓存其mtime。工作得很好。

我可以建议您定义重写规则并实现静态文件加载处理程序的方法。假设它是assethandler.php,以及您的重写规则

RewriteRule ^nocache/(.*?)$ assethandler.php?f=$1 [QSA,L]
在php中,您可以使用它获取始终最新的文件

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进行处理,在这个处理程序中,缓存总是被禁用,文件内容作为最新内容使用

我甚至可以添加?v=;但我更愿意使用尽可能多的缓存。这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论。我无法评论,因为PHP标签一直在编辑@nKnIt的模块化系统,其中每个模块都有自己的css文件;因此40个文件。我的系统也是模块化的,因为有一个核心文件和一个文件用于站点的每个页面;我也曾经有过这样的经历;现在这些文件组合在一起,用户在第一次访问登录页面时就可以得到他们需要的所有css和js,所以他们不会注意到后台加载了文件。加速所有其他页面加载:您可以使用缓存控制,通过使用php处理程序和重定向静态文件请求vi重写规则,使php头的属性过期。请参阅我的答案以了解更多详细信息。我不是在寻找一种完全禁用缓存的方法。仅当您使用path nocache/…时才禁用缓存。。。