Есть ли в PHP функция, которая может выполнять логику, аналогичную realpath(), но с файлами, которых может не быть в файловой системе? Очевидно, что он не сможет разрешать ссылки и т. д., но моя цель — увидеть, находится ли путь, указанный пользователем, в определенном каталоге (или подкаталоге этого каталога) без учета /.././ Путь типы вопросов самостоятельно. Вызов realpath был бы идеальным, если бы он не возвращал false, когда файл не существует.
Очистка путей к файлам в PHP
comment
Если он не должен возвращать false, что он должен возвращать?
- person Andreas Stokholm   schedule 22.02.2012
comment
пользователи, предоставляющие пути на вашем сервере, звучат как плохая идея для начала.
- person   schedule 22.02.2012
comment
возможно, php.net/manual/en/function.pathinfo.php помогу
- person Kuba   schedule 22.02.2012
comment
Вы всегда можете создать функцию, используя dir.
- person Marcin Necsord Szulc   schedule 22.02.2012
comment
В идеале он мог бы взять что-то вроде /var/www/foo/../bar и вернуть /var/www/bar, даже если этот путь не существует (уже есть другая встроенная функция PHP, которая может сказать мне, существует ли файл или нет, так что мне это тоже не нужно)
- person jmkelm08   schedule 22.02.2012
comment
если он возвращает false, попробуйте открыть его для записи
- person miki   schedule 22.02.2012
Ответы (2)
Если вас беспокоят только файлы, попробуйте:
function unrealpath($path){
$rp = realpath(dirname($path));
if( false === $rp )
return false;
return $rp.basename($path);
}
Если у вас есть опасения по поводу существующих или не существующих каталогов, это не сработает.
person
scragar
schedule
24.02.2012
Если вам нужно только удалить /../, самописная функция не будет такой сложной. Просто разделите строку на массив, выполните итерацию по массиву и вставьте значения в новый. Если вы нажмете .. удалите последний элемент, вставленный в новый массив. Затем объедините второй массив обратно в строку.
person
Johni
schedule
21.02.2012
Я не решался сделать это только потому, что слышал о хаках, которые люди использовали, когда они делали такие вещи, как указание многобайтового представления '.' характер, чтобы обойти людей, наивно зачищающих '.' символ. Может быть, мне не нужно беспокоиться об этих вещах в PHP?
- person jmkelm08; 22.02.2012
На самом деле, я понятия не имею, интерпретирует ли php эти многобайтовые файлы. как действие каталога вверх. Стоит попробовать самому, если это так. Если у меня будет время, я тоже попробую.
- person Johni; 25.02.2012