/** * Get the real path (taking ".." and such into account) * * @param string $path Path to resolve * @return string The resolved path * @link http://book.cakephp.org/2.0/en/core-utility-libraries/file-folder.html#Folder::realpath */ public function realpath($path) { $path = str_replace('/', DIRECTORY_SEPARATOR, trim($path)); if (strpos($path, '..') === false) { if (!Folder::isAbsolute($path)) { $path = Folder::addPathElement($this->path, $path); } return $path; } $parts = explode(DIRECTORY_SEPARATOR, $path); $newparts = array(); $newpath = ''; if ($path[0] === DIRECTORY_SEPARATOR) { $newpath = DIRECTORY_SEPARATOR; } while (($part = array_shift($parts)) !== null) { if ($part === '.' || $part === '') { continue; } if ($part === '..') { if (!empty($newparts)) { array_pop($newparts); continue; } return false; } $newparts[] = $part; } $newpath .= implode(DIRECTORY_SEPARATOR, $newparts); return Folder::slashTerm($newpath); }