. * * 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; } }