/**
  * 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;
 }
Exemple #2
0
 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;
 }