PHP获取绝对路径而不遵循符号链接

时间:2013-04-03 03:32:04

标签: php filesystems realpath

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

E.g。

/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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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