ls не разветвляется. Ветвления оболочки и должностные лица для выполнения любой команды, которая не встроена, и одна из команд, которые это может выполнить, являются ls.
ls использует opendir () и readdir () для продвижения через все файлы в каталог. Если требуется больше информации об одном из них, это называет статистику ().
Предположим, что это каталог / путь / к / root / каталог-документа / пользователь / файл
, а адрес - site.com/user/file
Первая функция, которую я показываю, получит имя текущего файла относительно адреса World Wide Web.
$path = $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
и приведет к:
site.com/user/file
Вторая функция удаляет заданный путь корня документа.
$path = str_replace($_SERVER['DOCUMENT_ROOT'], '', $path)
Учитывая, что я передается в / путь / к / root / каталог-документа / пользователь / файл
, Я бы получил
/user/file
Более точным способом (включая порт хоста) было бы чтобы использовать это
function path2url($file, $Protocol='http://') {
return $Protocol.$_SERVER['HTTP_HOST'].str_replace($_SERVER['DOCUMENT_ROOT'], '', $file);
}
ИМХО такая автоматизация действительно подвержена ошибкам. Намного лучше использовать некоторые явные помощники по пути (например, один для загрузки, один для изображений пользователей и т.д.) или просто инкапсулировать, например, загруженный файл с классом.
// Some "pseudo code"
$file = UploadedFile::copy($_FILES['foo']);
$file->getPath(); // /var/www/example.org/uploads/foo.ext
$file->getUri(); // http://example.org/uploads/foo.ext
Бесстыдное воровство форматирования Генри ...
$image_file = 'myphoto.jpg';
$file = PATH_IMAGES_FS.$image_file;
//-- stores: /var/www/example.com/uploads/myphoto.jpg
print PATH_IMAGES_WEB.$image_file;
//-- prints: uploads/myphoto.jpg