duangu9173
2019-07-09 13:01 阅读 103
已采纳

强制浏览器从php重新加载CSS

So i found How to force the browser to reload cached CSS/JS files? question there, but i have troubles figuring out what i am doing wrong with php function written in the answers.

<? 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);
}

I tried to copy-paste all of this to my website, changed .htaccess, created php file, made a proper link to php echo main.css in my project, did everything like it was suggested in the answer. But my .css file failed to load, console showed error about my php query failure. My guess is the code above must be configured in some way, but i have almost none of the php knowledge and this part about @param $file makes me wonder, how must i write this? @param $file = /css/main.css or what does it mean? Or i need to place /css/main.css in place of every $file? I cant comment answer in that original thread, so created a new one

edit: structure of my site is this:

index.html
auto_version.php
css/main.css

to index.html i added:

<link rel="stylesheet" href="<?php echo auto_version('/css/main.css'); ?>" type="text/css" />

I also edited first block of code with part, as it stands in mine .php file. So as you can see, index.html and auto_version.php both located in root folder of website, and main.css is inside of css folder. May this be an issue im not sure.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    duandong9195 duandong9195 2019-07-09 13:21

    Did you put this in your html code?

        <?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" />
    

    Its important you put the function code before you call it in the html code

    Also make sure that your file has a .php extension.

    If you did, or that didnt work, then i suspect that your path is wrong. Go on Filezilla or whatever youre using to manage your website files, and from the first folder, go to your css file. Then take that path.

    For example, the path for my boostrap css file on my linux server is "/var/www/html/bootstrap/css/bootstrap-theme.css" You must start from the very first parent file (which is "/", the root of your website). Its normal if your path doesnt look like mine, its completely arbitrory.

    Then just replace the old path with the new path u figured out

    <link rel="stylesheet" href="<?php echo auto_version('/var/www/html/bootstrap/css/bootstrap-theme.css'); ?>" type="text/css" />
    

    If that doesnt work, show me your PHP error message please

    EDIT : this is how your auto_version.php file should look

    <?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>
    
    点赞 评论 复制链接分享

相关推荐