. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ class FileCache { function __construct($dir) { $this->dir = $dir; } private function _name($key) { return sprintf ( "%s/%s", $this->dir, sha1 ( $key ) ); } public function get($key, $expiration = 3600) { if (! is_dir ( $this->dir ) or ! is_writable ( $this->dir )) { return FALSE; } $cache_path = $this->_name ( $key ); if (! @file_exists ( $cache_path )) { return FALSE; } if (filemtime ( $cache_path ) < (time () - $expiration)) { // $this->clear($key); // different users can have different timeout requests return FALSE; } if (! $fp = @fopen ( $cache_path, 'rb' )) { return FALSE; } flock ( $fp, LOCK_SH ); $cache = ''; if (filesize ( $cache_path ) > 0) { $cache = unserialize ( fread ( $fp, filesize ( $cache_path ) ) ); } else { $cache = NULL; } flock ( $fp, LOCK_UN ); fclose ( $fp ); return $cache; } public function set($key, $data) { if (! is_dir ( $this->dir ) or ! is_writable ( $this->dir )) { return FALSE; } $cache_path = $this->_name ( $key ); if (! $fp = fopen ( $cache_path, 'wb' )) { return FALSE; } if (flock ( $fp, LOCK_EX )) { fwrite ( $fp, serialize ( $data ) ); flock ( $fp, LOCK_UN ); } else { return FALSE; } fclose ( $fp ); @chmod ( $cache_path, 0777 ); return TRUE; } public function clear($key) { $cache_path = $this->_name ( $key ); if (file_exists ( $cache_path )) { unlink ( $cache_path ); return TRUE; } return FALSE; } }