强制浏览器获取某些来源(CSS,JS等)的最新版本

时间:2019-07-11 15:31:00

标签: php caching filetime

当有人访问我的网站时,我想确保浏览器具有我的文件CSS,JS等的最新版本。我附带的想法是在链接上添加额外的参考:

代替使用

<script type="text/javascript" src="www.mywebsite.com/my_file.js"><script>

我在打电话

<script type="text/javascript" src="www.mywebsite.com/my_file.js?lastUpdate"><script>

我设法在文件的最后修改日期之前替换 lastUpdate 。链接变为“新”,浏览器正在更新有关文件的缓存。 请注意,我所有的文件都在服务器上。

为此,我正在调用php函数(概述)

function getLastUpdate($link){
    if(file_exists($link)){
        return $link.'?'.filetime($link);
    }
    return $link;
}

并命名为:

echo '<script type="text/javascript" src="'.getLastUpdate('www.mywebsite.com/my_file.js').'"><script>';

一切正常。几乎。该功能存储在 ./ code / function.php 中 它由许多不同文件夹中的许多文件使用。我的问题:我不知道要为 $ link 输入什么。关于url地址,它有时起作用,有时不起作用。如果我给出绝对文件路径(对我来说会更容易),则函数file_exists返回false。如果我给出相对路径,它有时会起作用,有时却不会。我猜是由于我正在使用url重写,并且链接正在更改?

我做错了什么?我该如何解决呢? 谢谢!

1 个答案:

答案 0 :(得分:0)

我正在使用这种代码来始终获取最新版本:

功能:

function file_versioning($file){
    $filemtime = filemtime($file);
    return "{$file}?v={$filemtime}";
}

在“ Core.php”中调用函数:

$CssLib = file_versioning("{$IncDir}/Lib.css");
// $IncDir is the relative path from the php script to the "library folder"
echo <<<EOD
    <link rel="stylesheet" type="text/css" href="{$CssLib}" />
EOD;

在“ index.php”中调用“核心”:

$IncDir ='.inc/Libs';
require $IncDir.'/Core.php';

⋅⋅⋅

我不知道这是否是最好的方法……但是,那行得通。 我可以在不同位置进行多次内核调用,但是该内核使用的相对路径记录在每个调用脚本中。