如何在不使用符号链接的情况下获得文件的绝对路径?
。
/path/to/some/file
/path/to/some/link -> /path/to/some/file
/path/to/some/directory/
我的当前工作目录是/path/to/some/directory/
,我去realpath('../link)
,它返回/path/to/some/file
。
(我知道realpath
应该这样工作)
是否有一个函数代替realpath
返回/path/to/some/link
David Beck在PHP手册的注释部分编写了一个解决方案,该解决方案可以在不访问实际文件系统的情况下清理相对路径组件。唉,他忘了在函数中添加return
语句,但如果这是你需要的,它似乎工作得很好。也适用于url。
function canonicalize($address)
{
$address = explode('/', $address);
$keys = array_keys($address, '..');
foreach($keys AS $keypos => $key)
{
array_splice($address, $key - ($keypos * 2 + 1), 2);
}
$address = implode('/', $address);
$address = str_replace('./', '', $address);
return $address;
}
$url = '/path/to/some/weird/directory/../.././link';
echo canonicalize($url); // /path/to/some/link
还有我经常使用的getcwd();
。语法简单。