php - 强制浏览器从 php 重新加载 CSS
问题描述
所以我发现如何强制浏览器重新加载缓存的 CSS/JS 文件?那里有问题,但我很难弄清楚我在答案中写的php函数做错了什么。
<? php
/**
* Given a file, i.e. /css/base.css, replaces it with a string containing the
* file's mtime, i.e. /css/base.1221534296.css.
*
* @param $file The file to be loaded. Must be an absolute path (i.e.
* starting with slash).
*/
function auto_version($file)
{
if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file))
return $file;
$mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $file);
return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file);
}
我尝试将所有这些复制粘贴到我的网站,更改 .htaccess,创建 php 文件,在我的项目中建立到 php echo main.css 的正确链接,按照答案中的建议进行操作。但是我的 .css 文件无法加载,控制台显示我的 php 查询失败的错误。我的猜测是上面的代码必须以某种方式配置,但我几乎没有 php 知识,这部分关于@param $file让我想知道,我必须如何编写这个? @param $file = /css/main.css或者它是什么意思?或者我需要放置/css/main.css来代替每个 $file?我无法在该原始线程中评论答案,因此创建了一个新线程
编辑: 我的网站结构是这样的:
index.html
auto_version.php
css/main.css
我在 index.html 中添加了:
<link rel="stylesheet" href="<?php echo auto_version('/css/main.css'); ?>" type="text/css" />
我还用部分编辑了第一块代码,因为它位于我的 .php 文件中。如您所见,index.html 和 auto_version.php 都位于网站的根文件夹中,而 main.css 位于 css 文件夹中。这可能是一个我不确定的问题。
解决方案
你把它放在你的html代码中了吗?
<?php
function auto_version($file)
{
if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file))
return $file;
$mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $file);
return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file);
}
?>
<link rel="stylesheet" href="<?php echo auto_version('/css/main.css'); ?>" type="text/css" />
在 html 代码中调用它之前放置函数代码很重要
还要确保您的文件具有 .php 扩展名。
如果你这样做了,或者那没有用,那么我怀疑你的路径是错误的。继续使用 Filezilla 或任何你用来管理网站文件的工具,然后从第一个文件夹转到你的 css 文件。然后走那条路。
例如,我的 linux 服务器上的 boostrap css 文件的路径是“/var/www/html/bootstrap/css/bootstrap-theme.css” 您必须从第一个父文件开始(即“/”,您网站的根目录)。如果你的路径看起来不像我的,那是正常的,它完全是任意的。
然后用你想出的新路径替换旧路径
<link rel="stylesheet" href="<?php echo auto_version('/var/www/html/bootstrap/css/bootstrap-theme.css'); ?>" type="text/css" />
如果这不起作用,请告诉我您的 PHP 错误消息
编辑:这是您的 auto_version.php 文件的外观
<?php
function auto_version($file)
{
if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file))
return $file;
$mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $file);
return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file);
}
?>
<doctype html>
etc
<link rel="stylesheet" href="<?php echo auto_version('/css/main.css'); ?>" type="text/css" />
etc
<body>
etc
</body>
<html>
推荐阅读
- javascript - KeyDown 和 keyUp 不保存多个键
- axios - 从 Axios 错误拦截器参数中获取完整的 url
- asp.net - GitHub 操作无法发布到 Azure
- java - 如何获取 Java 应用程序的性能指标
- go - 使用 dynamodb 触发器的 aws-lambda 中的 IncompatibleDynamoDBTypeError
- java - Apache POI 克隆表损坏了 excel 文件
- ios - 当应用程序在 ios 上处于后台时,不显示本机推送通知
- mysql - 合并数据库 - 将一个数据库中不存在的行添加到另一个数据库
- javascript - 在柏树中,测试中的拦截不起作用
- java - 如何获取与另一个实体B具有一对多关联的实体A的不同记录,按B记录的最新时间戳的最大值排序