dir = $dir; } private function _name( $key ) { return $this->dir . "/" . sha1( $key ); } public function get( $key, $expiration = 3600 ) { if ( !is_dir( $this->dir ) || !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 ); 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 ) || !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; } } ?>