PHP получает абсолютный путь без следующих символических ссылок

Как получить абсолютный путь к файлу, без следующих символических ссылок.

Например

/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 ответа

Дэвид Бек (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(); которым я пользуюсь довольно часто. Синтаксически проще.

Другие вопросы по тегам