在 PHP 中,是否有一种内置方法来解析相对于另一个路径的路径?
例如,给定一个$baseDir
dir: /home/ben/project
,以下内容$path
应解析为:
/foo/bar
→/foo/bar
../foo/bar
, →/home/ben/foo/bar
想到的解决方案:
临时更改当前工作目录,并使用
realpath()
:$currentDir = getcwd(); chdir($baseDir); $resolvedPath = realpath($path); chdir($currentDir); return $resolvedPath;
这个解决方案有点乏味。
检查路径是否是绝对的,如果不是,使用
realpath()
:if ($path[0] === '/') { return $path; } return realpath($currentDir . '/' . $path);
该解决方案不是跨平台的;使其安全地跨平台可能并不像看起来那么简单。
最后但同样重要的是,当路径不存在时realpath()
返回false
,这在上面的代码中没有考虑到,并且在某些用例中可能是一个问题。
我错过了什么?