add autoversioning of css and js files
authorArun Persaud <arun@nubati.net>
Sun, 3 Jun 2012 16:24:23 +0000 (09:24 -0700)
committerArun Persaud <arun@nubati.net>
Sun, 3 Jun 2012 16:24:23 +0000 (09:24 -0700)
automatically add the md5 hash to the filename and then use .htaccess to filter it out again.
This way we don't need to change the filename and the client can cache correctly

htaccess_template
index.php

index aa6f5a762375599b0ea26bca5ac04882339aa6ce..d4ba12add087bbc0fff201d270ba4fb765aae06c 100644 (file)
@@ -6,8 +6,11 @@ RewriteBase   /<insert web base url here>
 # hide git directory (and others)
 RedirectMatch 404 \.(git|cvs|svn|bzr|hg)(/.*|$)
 
+# use autoversioning of js and css files
+RewriteRule ^(.*)\.[[:xdigit:]]{32}\.(css|js)$ $1.$2 [L]
 
-# make the url nice and clean; the comments shows an url that should be matched
+
+### make the url nice and clean; the comments shows an url that should be matched
 
 # web_base/tag/me+berlin/pic/id
 RewriteRule tag/([-_\s,a-zA-Z0-9+]*)/pic/([0-9]*) index.php?tag=$1&pic=$2 [L]
index 85610d9b623c57b5187595fdf83d6f0a40e6b414..a2de85ae3ff7cdd432afa29051d14bbf98baa0a1 100644 (file)
--- a/index.php
+++ b/index.php
@@ -25,14 +25,29 @@ else
   $pic = -1;
 /* end parse flags */
 
+/* autoversioning of js and css files */
+function autoversion($file)
+{
+  /* changes the file name of e.g. css/style.css to css/style.<md5>.css/js
+   * this way the browser can cache the file and will reload it if the file changed
+   * needs to have .htaccess set up correctly to link back to css/style.css */
+
+  /* only use it for file that have an absolut path */
+  if(!file_exists(dirname($_SERVER['SCRIPT_FILENAME']). '/' . $file))
+    return $file;
+
+  $md5 = md5_file(dirname($_SERVER['SCRIPT_FILENAME']). '/' . $file);
+  return preg_replace('{\\.([^./]+)$}', ".$md5.\$1", $file);
+}
+
 /* The basic layout */
 ?>
 
 <html>
 <title><?php echo htmlspecialchars($title) ?></title>
-<script src = "<?php echo $webbase?>/js/d3.min.js"></script>
-<link rel="stylesheet" type="text/css" href="<?php echo $webbase?>/css/normalize.css" />
-<link rel="stylesheet" type="text/css" href="<?php echo $webbase?>/css/style.css" />
+<script src = "<?php echo $webbase.autoversion("/js/d3.min.js")?>"></script>
+<link rel="stylesheet" type="text/css" href="<?php echo $webbase.autoversion("/css/normalize.css")?>" />
+<link rel="stylesheet" type="text/css" href="<?php echo $webbase.autoversion("/css/style.css")?>" />
 
 <body>
 
@@ -68,7 +83,7 @@ page <span class="index"></span>
 </footer>
 
 
-<script src = "<?php echo $webbase?>/js/photo-tags.js"></script>
+<script src = "<?php echo $webbase.autoversion("/js/photo-tags.js")?>"></script>
 <script type="text/javascript" >
 /*hand parameters over to javascript*/
 var page=<?php echo $page ?>;