setExists($options); } /** * Returns true if the filtered path must exist * * @return boolean */ public function getExists() { return $this->_exists; } /** * Sets if the path has to exist * TRUE when the path must exist * FALSE when not existing paths can be given * * @param boolean|Zend_Config $exists Path must exist * @return Zend_Filter_RealPath */ public function setExists($exists) { if ($exists instanceof Zend_Config) { $exists = $exists->toArray(); } if (is_array($exists)) { if (isset($exists['exists'])) { $exists = (boolean) $exists['exists']; } } $this->_exists = (boolean) $exists; return $this; } /** * Defined by Zend_Filter_Interface * * Returns realpath($value) * * @param string $value * @return string */ public function filter($value) { $path = (string) $value; if ($this->_exists) { return realpath($path); } $realpath = @realpath($path); if ($realpath) { return $realpath; } $drive = ''; if (substr(PHP_OS, 0, 3) == 'WIN') { $path = preg_replace('/[\\\\\/]/', DIRECTORY_SEPARATOR, $path); if (preg_match('/([a-zA-Z]\:)(.*)/', $path, $matches)) { list($fullMatch, $drive, $path) = $matches; } else { $cwd = getcwd(); $drive = substr($cwd, 0, 2); if (substr($path, 0, 1) != DIRECTORY_SEPARATOR) { $path = substr($cwd, 3) . DIRECTORY_SEPARATOR . $path; } } } elseif (substr($path, 0, 1) != DIRECTORY_SEPARATOR) { $path = getcwd() . DIRECTORY_SEPARATOR . $path; } $stack = array(); $parts = explode(DIRECTORY_SEPARATOR, $path); foreach ($parts as $dir) { if (strlen($dir) && $dir !== '.') { if ($dir == '..') { array_pop($stack); } else { array_push($stack, $dir); } } } return $drive . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $stack); } }