Обходить каталоги с помощью php?

У меня есть путь к папке (например, /var/www/tester/assets/themes/default/css/).

пользователь может указать относительный путь к папке, например. layout/ie7.css дал бы путь /var/www/tester/assets/themes/default/css/layout/ie7.css,

Это прекрасно работает, однако я хочу, чтобы пользователи могли также перемещаться по дереву каталогов.

так с путем к папке css снова, если пользователь предоставляет ../../cache/css/ie7.css Я хочу, чтобы путь закончился как /var/www/tester/assets/themes/default/cache/css/ie7.css,

Я думал, что могу просто передать их вместе в realpath(), например:

$base = '/var/www/tester/assets/themes/default/css/';
$user_path = '../../cache/css/ie7.css';
$final_path = realpath($base.$user_path);

Но это просто возвращает ложь. Как я могу это сделать?

2 ответа

Решение

В первую очередь функция реального пути также проверяет, существует ли данный путь... Вы уверены, что ваш путь существует???

/var/www/tester/assets/themes/default/css/../../cache/css/ie7.css 

не будет в конечном итоге в

/var/www/tester/assets/themes/default/cache/css/ie7.css 

как вы предлагаете, но это заканчивается

/var/www/tester/assets/themes/cache/css/ie7.css 

Существует ли эта папка с данным файлом?

Просто не надо. Там нет ничего плохого в пути, как /var/www/tester/assets/themes/default/css/../../cache/css/ie7.css, Работает на всех ОС и браузерах.

Примечание. Знаете ли вы, что вы можете создать угрозу безопасности здесь? Что делать, если пользователи предоставляют ../../../../../../../etc/passwd?

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