annotate CacheTimeCheck.inc @ 51:2cfea6e84694

Documentation update.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Thu, 11 Oct 2012 00:06:26 +0200
parents 2d0cda52f43f
children 3898353ed1d8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d2da64705bce Refactored everything in the CMS into this repos.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
1 <?php
48
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
2 /**
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
3 * CacheTimeCheck provides a set of functions to enable generating a
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
4 * correct time for the latest update for a given file.
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
5 *
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
6 * @author Tom Fredrik Blenning Klaussen
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
7 */
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
8 class CacheTimeCheck
14
91ee5f49907e Correct caching.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 6
diff changeset
9 {
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
10 private $newest;
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
11 private $files = array();
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
12 private static $myInstance = 0;
6
6c0162497d56 Improved error reporting, and support for multilevel params.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 0
diff changeset
13
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
14 private function __construct($filename = False)
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
15 {
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
16 if ($filename)
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
17 $this->cache_time($filename);
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
18 $this->cache_time(__FILE__);
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
19 }
0
d2da64705bce Refactored everything in the CMS into this repos.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
20
48
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
21 /**
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
22 * List a set of files which contributes to this pages cacheset.
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
23 *
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
24 * @param $humanReadable If the timestamp should be humand readable.
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
25 *
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
26 * @return an associative array of file, and timestamp
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
27 */
47
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
28 function cacheSet($humanReadable = False)
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
29 {
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
30 $retVal = array();
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
31 foreach($this->files as $file) {
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
32 $mtime = filemtime($file);
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
33 if ($humanReadable)
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
34 $mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
35
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
36 $retVal[$file] = $mtime;
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
37 }
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
38 return $retVal;
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
39 }
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
40
48
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
41 /**
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
42 * Generates a singleton instance of this CacheTimeCheck
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
43 *
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
44 * @param $filename an optional file to include in the cacheset
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
45 *
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
46 * @return a CacheTimeCheck object
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
47 */
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
48 function instance($filename = False)
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
49 {
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
50 if (! self::$myInstance)
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
51 self::$myInstance = new self($filename);
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
52 elseif ($filename)
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
53 self::$myInstance->cache_time($filename);
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
54 return self::$myInstance;
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
55 }
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
56
48
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
57 /**
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
58 * Checks if a HTTP_IF_MODIFIED_SINCE header is set, if this file is
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
59 * newer, set a Last-Modified header, otherwise abort with an 304
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
60 * status code
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
61 */
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
62 function CheckHttpModified()
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
63 {
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
64 if (DEBUG_LEVEL >= VERBOSITY_DEBUG)
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
65 var_dump($_SERVER);
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
66
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
67 $gmdate_mod = gmdate('D, d M Y H:i:s', $this->newest) . ' GMT';
40
fbbb82ced6de Fixes for CacheTimeCheck->includeOnce paths.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 39
diff changeset
68
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
69 if(array_key_exists('HTTP_IF_MODIFIED_SINCE', $_SERVER)) {
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
70 $HTTP_IF_MODIFIED_SINCE = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
71 $if_modified_since = preg_replace('/;.*$/', '', $HTTP_IF_MODIFIED_SINCE);
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
72
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
73 if (strtotime($if_modified_since) >= $this->newest) {
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
74 header("HTTP/1.0 304 Not Modified");
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
75 exit;
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
76 }
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
77 }
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
78
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
79 header("Last-Modified: $gmdate_mod");
14
91ee5f49907e Correct caching.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 6
diff changeset
80 }
16
a64e8f968e7e Fast abort if cachehit.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 15
diff changeset
81
48
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
82 /**
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
83 * Include a file in the cacheset
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
84 *
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
85 * @param $path the path of the file
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
86 */
50
2d0cda52f43f Remove unused variable.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 48
diff changeset
87 function cache_time($path)
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
88 {
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
89 if (!file_exists($path)) {
47
66382989353f Extract baseDir only once.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 40
diff changeset
90 warn("${path} does not exist");
39
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
91 errorPage("Resource not available");
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
92 }
bd82b719a0de Make CacheTimeCheck a singleton.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 38
diff changeset
93
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
94 array_push($this->files, $path);
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
95 $mtime = filemtime($path);
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
96 if ($mtime > $this->newest) {
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
97 $this->newest = $mtime;
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
98 }
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
99 }
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
100
48
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
101 /**
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
102 * Convenience function to include a file, and add it to the cacheset.
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
103 *
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
104 * @param $path path of the file
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
105 * @param $basedir a directory to prepend to the path
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
106 */
40
fbbb82ced6de Fixes for CacheTimeCheck->includeOnce paths.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 39
diff changeset
107 function includeOnce($path, $basedir = false)
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
108 {
40
fbbb82ced6de Fixes for CacheTimeCheck->includeOnce paths.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 39
diff changeset
109 if ($basedir)
fbbb82ced6de Fixes for CacheTimeCheck->includeOnce paths.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 39
diff changeset
110 $path = $basedir . "/" . $path;
32
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
111 $this->cache_time($path);
7b19be62ea94 Remove yet another global, replace by CacheTimeCheck class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 27
diff changeset
112 include_once($path);
16
a64e8f968e7e Fast abort if cachehit.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 15
diff changeset
113 }
38
42533600214b Rename cache_check.inc to CacheTimeCheck.inc.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 32
diff changeset
114
48
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
115 /**
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
116 * Convenience function to load a file, and add it to the cacheset
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
117 *
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
118 * @param $path path of the file
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
119 * @return the contents of the file
c6d0892f81ff Documentation.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
120 */
38
42533600214b Rename cache_check.inc to CacheTimeCheck.inc.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 32
diff changeset
121 function loadFile($path)
42533600214b Rename cache_check.inc to CacheTimeCheck.inc.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 32
diff changeset
122 {
42533600214b Rename cache_check.inc to CacheTimeCheck.inc.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 32
diff changeset
123 $this->cache_time($path);
42533600214b Rename cache_check.inc to CacheTimeCheck.inc.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 32
diff changeset
124 return loadFile($path);
42533600214b Rename cache_check.inc to CacheTimeCheck.inc.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 32
diff changeset
125 }
16
a64e8f968e7e Fast abort if cachehit.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 15
diff changeset
126 }
50
2d0cda52f43f Remove unused variable.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents: 48
diff changeset
127 ?>