/** * Sets the current cache key this class is managing, and creates a writable SplFileObject * for the cache file the key is referring to. * * @param string $key The key * @param bool $createKey Whether the key should be created if it doesn't exists, or not * @return bool true if the cache key could be set, false otherwise */ protected function _setKey($key, $createKey = false) { $groups = null; if (!empty($this->_groupPrefix)) { $groups = vsprintf($this->_groupPrefix, $this->groups()); } $dir = $this->_config['path'] . $groups; if (!is_dir($dir)) { mkdir($dir, 0775, true); } $path = new \SplFileInfo($dir . $key); if (!$createKey && !$path->isFile()) { return false; } if (empty($this->_File) || $this->_File->getBaseName() !== $key) { $exists = file_exists($path->getPathname()); try { $this->_File = $path->openFile('c+'); } catch (\Exception $e) { trigger_error($e->getMessage(), E_USER_WARNING); return false; } unset($path); if (!$exists && !chmod($this->_File->getPathname(), (int) $this->_config['mask'])) { trigger_error(sprintf('Could not apply permission mask "%s" on cache file "%s"', $this->_File->getPathname(), $this->_config['mask']), E_USER_WARNING); } } return true; }
protected function _openFile($key, $createKey = false) { $dir = $this->settings['path']; //create dir if needed if (!is_dir($dir)) { mkdir($dir, 0777, true); } $path = new SplFileInfo($dir . $key); if (!$createKey && !$path->isFile()) { return false; } if (empty($this->file) || $this->file->getBaseName() !== $key) { $exists = file_exists($path->getPathname()); try { $this->file = $path->openFile('c+'); } catch (Exception $e) { if (!$this->settings['suppress_errors']) { trigger_error($e->getMessage(), E_USER_WARNING); } return false; } unset($path); if (!$exists && !chmod($this->file->getPathname(), (int) $this->settings['mask'])) { if (!$this->settings['suppress_errors']) { trigger_error('Could not apply permission mask on cache file ' . $this->file->getPathname(), E_USER_WARNING); } } } return true; }