Обходить каталоги с помощью 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
?