2

如何在不遵循符号链接的情况下获取文件的绝对路径。

例如

/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

4

2 回答 2

3

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
于 2013-04-03T04:42:13.207 回答
2

还有getcwd();我经常使用的。语法上更简单。

于 2013-04-03T04:26:28.577 回答