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