#php
#php
Вопрос:
В скрипте загрузки у меня есть
$destination = $_SERVER['DOCUMENT_ROOT'] . '/uploads/'. $_SESSION['username'] . '/entries/' . '/' . $year . '/';
и я загружаю путь к изображению в базу данных, и, таким образом, в строковых хранилищах хранится real_path (т. Е.. S:siteswwwmysiteuploadsusernameentries2011file.png )
существует ли функция, которая преобразует этот реальный путь в «http://sitename/uploads …»
хотя реализовать ее не сложно, мне было интересно, есть ли встроенная. я посмотрел в документах, но ничего не смог найти.
Комментарии:
1. Как это будет работать? Дюжина URL-адресов может (и часто будет) отображаться в один и тот же физический файл. Какую из них вернет эта функция и какую магию предсказания она должна использовать?
Ответ №1:
Даже если бы она была, ее не следует считать надежной, поскольку компоненты в URL не обязательно сопоставляются с путями в файловой системе. Лучше всего удалить известный префикс из пути и заменить его базовым URL, содержащим МЕДИА.
Ответ №2:
Я нашел это на php.net :
<?php
function mapURL($relPath) { //This function is not perfect, but you can use it to convert a relative path to a URL. Please email me if you can make any improvements.
$filePathName = realpath($relPath);
$filePath = realpath(dirname($relPath));
$basePath = realpath($_SERVER['DOCUMENT_ROOT']);
// can not create URL for directory lower than DOCUMENT_ROOT
if (strlen($basePath) > strlen($filePath)) {
return '';
}
return 'http://' . $_SERVER['HTTP_HOST'] . substr($filePathName, strlen($basePath));
}
?>
Ответ №3:
Похоже, все, что вам нужно сделать, это построить свой path по-другому.
$base = '/uploads/'. $_SESSION['username'] . '/entries/' . '/' . $year . '/';
$destination = $_SERVER['DOCUMENT_ROOT'] . $base;
$url = $_SERVER['HTTP_HOST'] . $base;
Ответ №4:
Уверен, что есть. Это называется «замена пути». А именно:
$file = 'S:\sites\www\mysite\uploads\username\entries\2011\file.png';
$root = 'S:\sites\www\mysite\';
$web = str_replace( array($root,'\'), array('/','/'), $file);
$web => '/uploads/username/entries/2011/file.png'
Вы можете добавить туда свое доменное имя с помощью $_SERVER['SERVER_NAME']
.
С другой стороны, вы должны знать, что (sym) ссылки — это много к одному. То есть у вас может быть несколько ярлыков, указывающих на один и тот же файл, но не наоборот. Таким образом, вы не можете знать, какой ярлык является правильным.
Ответ №5:
«Самый надежный» (использовать с осторожностью) — использовать DIRECTORY_SEPARATOR
:
$uri = str_replace( DIRECTORY_SEPARATOR, "/", ltrim( $path, $root ) )