2011-01-24 2 views
0

Так, предполагая, относительный URIРасчет родителя относительного файла

../file.ext 

бы быть родителем

../ 

или

../../file.ext 

Если его первым, то что родитель от

../ 

, и это второе, что бы прекратило потенциально бесконечный цикл, если бы один из них неоднократно вызывал гипотетический метод getParent на нем?

+0

Я смущен. Рекурсивный вызов getParent() должен останавливаться, когда строка либо пуста, либо когда в ней больше нет «/» ... если я правильно вас понимаю, но я боюсь, что я немного смущен относительно того, что точно ваш вопрос. :) – Teekin

ответ

1

Учитывая "текущий каталог" из

/you/are/here/ 

тогда ../file.ext будет

/you/are/file.ext 

и ../../file.ext будет

/you/file.ext 

Учитывая getParent() функции, то должны были бы остановитесь, когда достигнет верхнего уровня файловой системы. Это тривиально проверять, глядя на номера индексных номеров . и ... Если они совпадают, вы находитесь на вершине дерева. По определению, «..» в верхней части дерева снова вернет верхнюю часть дерева.

+0

Спасибо Marc! Я не был уверен ... на вершине дерева. – VLostBoy

+0

Бонусные баллы - не могли бы вы рассказать мне, подходит ли это для родительского элемента URI, состоящего из пустой строки (которая является действительной ссылкой на URI, по-видимому: http://en.wikipedia.org/wiki/Uniform_Resource_Identifier), чтобы разрешить "/'? Это чисто синтаксический вопрос. Btw – VLostBoy

+0

У очень старых версий Apache возникла проблема, когда вы могли указать достаточно «../../ ..» в URL-адресе и вырваться из webroot и начать перемещение по файловой системе. Но это было давно заперто. Теперь, как только вы дойдете до webroot, выполнение «../» становится нулевым оператором, а Apache рассматривает вершину webroot так же, как и верхнюю часть файловой системы. Нет ничего плохого в 'example.com/? A = b', он просто использует документ по умолчанию (index.html/index.php и т. Д.), Расположенный в webroot. –

Смежные вопросы