首页 > 解决方案 > 强制浏览器从 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 文件夹中。这可能是一个我不确定的问题。

标签: phpcss

解决方案


你把它放在你的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>

推荐阅读