[ Index ] |
|
Code source de LifeType 1.2.4 |
1 <?php 2 /* 3 * Project: MagpieRSS: a simple RSS integration tool 4 * File: rss_cache.inc, a simple, rolling(no GC), cache 5 * for RSS objects, keyed on URL. 6 * Author: Kellan Elliott-McCrea <kellan@protest.net> 7 * Version: 0.51 8 * License: GPL 9 * 10 * The lastest version of MagpieRSS can be obtained from: 11 * http://magpierss.sourceforge.net 12 * 13 * For questions, help, comments, discussion, etc., please join the 14 * Magpie mailing list: 15 * http://lists.sourceforge.net/lists/listinfo/magpierss-general 16 * 17 */ 18 19 class RSSCache { 20 var $BASE_CACHE = './cache'; // where the cache files are stored 21 var $MAX_AGE = 3600; // when are files stale, default one hour 22 var $ERROR = ""; // accumulate error messages 23 24 function RSSCache ($base='', $age='') { 25 if ( $base ) { 26 $this->BASE_CACHE = $base; 27 } 28 if ( $age ) { 29 $this->MAX_AGE = $age; 30 } 31 32 // attempt to make the cache directory 33 if ( ! file_exists( $this->BASE_CACHE ) ) { 34 $status = @mkdir( $this->BASE_CACHE, 0755 ); 35 36 // if make failed 37 if ( ! $status ) { 38 $this->error( 39 "Cache couldn't make dir '" . $this->BASE_CACHE . "'." 40 ); 41 } 42 } 43 } 44 45 /*=======================================================================*\ 46 Function: set 47 Purpose: add an item to the cache, keyed on url 48 Input: url from wich the rss file was fetched 49 Output: true on sucess 50 \*=======================================================================*/ 51 function set ($url, $rss) { 52 $this->ERROR = ""; 53 $cache_file = $this->file_name( $url ); 54 $fp = @fopen( $cache_file, 'w' ); 55 56 if ( ! $fp ) { 57 $this->error( 58 "Cache unable to open file for writing: $cache_file" 59 ); 60 return 0; 61 } 62 63 64 $data = $this->serialize( $rss ); 65 fwrite( $fp, $data ); 66 fclose( $fp ); 67 68 return $cache_file; 69 } 70 71 /*=======================================================================*\ 72 Function: get 73 Purpose: fetch an item from the cache 74 Input: url from wich the rss file was fetched 75 Output: cached object on HIT, false on MISS 76 \*=======================================================================*/ 77 function get ($url) { 78 $this->ERROR = ""; 79 $cache_file = $this->file_name( $url ); 80 81 if ( ! file_exists( $cache_file ) ) { 82 $this->debug( 83 "Cache doesn't contain: $url (cache file: $cache_file)" 84 ); 85 return 0; 86 } 87 88 $fp = @fopen($cache_file, 'r'); 89 if ( ! $fp ) { 90 $this->error( 91 "Failed to open cache file for reading: $cache_file" 92 ); 93 return 0; 94 } 95 96 if ($filesize = filesize($cache_file) ) { 97 $data = fread( $fp, filesize($cache_file) ); 98 $rss = $this->unserialize( $data ); 99 100 return $rss; 101 } 102 103 return 0; 104 } 105 106 /*=======================================================================*\ 107 Function: check_cache 108 Purpose: check a url for membership in the cache 109 and whether the object is older then MAX_AGE (ie. STALE) 110 Input: url from wich the rss file was fetched 111 Output: cached object on HIT, false on MISS 112 \*=======================================================================*/ 113 function check_cache ( $url ) { 114 $this->ERROR = ""; 115 $filename = $this->file_name( $url ); 116 117 if ( file_exists( $filename ) ) { 118 // find how long ago the file was added to the cache 119 // and whether that is longer then MAX_AGE 120 $mtime = filemtime( $filename ); 121 $age = time() - $mtime; 122 if ( $this->MAX_AGE > $age ) { 123 // object exists and is current 124 return 'HIT'; 125 } 126 else { 127 // object exists but is old 128 return 'STALE'; 129 } 130 } 131 else { 132 // object does not exist 133 return 'MISS'; 134 } 135 } 136 137 function cache_age( $cache_key ) { 138 $filename = $this->file_name( $url ); 139 if ( file_exists( $filename ) ) { 140 $mtime = filemtime( $filename ); 141 $age = time() - $mtime; 142 return $age; 143 } 144 else { 145 return -1; 146 } 147 } 148 149 /*=======================================================================*\ 150 Function: serialize 151 \*=======================================================================*/ 152 function serialize ( $rss ) { 153 return serialize( $rss ); 154 } 155 156 /*=======================================================================*\ 157 Function: unserialize 158 \*=======================================================================*/ 159 function unserialize ( $data ) { 160 return unserialize( $data ); 161 } 162 163 /*=======================================================================*\ 164 Function: file_name 165 Purpose: map url to location in cache 166 Input: url from wich the rss file was fetched 167 Output: a file name 168 \*=======================================================================*/ 169 function file_name ($url) { 170 $filename = md5( $url ); 171 return join( DIRECTORY_SEPARATOR, array( $this->BASE_CACHE, $filename ) ); 172 } 173 174 /*=======================================================================*\ 175 Function: error 176 Purpose: register error 177 \*=======================================================================*/ 178 function error ($errormsg, $lvl=E_USER_WARNING) { 179 // append PHP's error message if track_errors enabled 180 if ( isset($php_errormsg) ) { 181 $errormsg .= " ($php_errormsg)"; 182 } 183 $this->ERROR = $errormsg; 184 if ( MAGPIE_DEBUG ) { 185 trigger_error( $errormsg, $lvl); 186 } 187 else { 188 error_log( $errormsg, 0); 189 } 190 } 191 192 function debug ($debugmsg, $lvl=E_USER_NOTICE) { 193 if ( MAGPIE_DEBUG ) { 194 $this->error("MagpieRSS [debug] $debugmsg", $lvl); 195 } 196 } 197 198 } 199 200 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Mon Nov 26 21:04:15 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |