在上传脚本中,我有
$destination = $_SERVER['DOCUMENT_ROOT'] . '/uploads/'. $_SESSION['username'] . '/entries/' . '/' . $year . '/';
我将图像路径上传到数据库,因此字符串存储是real_path(即S:\ sites \ www \ mysite \ uploads \ username \ entries \ 2011 \ file.png)
是否有一个将该真实路径转换为“http:// sitename / uploads ...”的函数
虽然不难实现,但我想知道是否有内置的。我查看了文档但找不到任何内容。答案 0 :(得分:5)
即使有,也不应该认为它是可靠的,因为URL中的组件不一定映射到文件系统中的路径。最好从路径中删除已知前缀,并将其替换为包含媒体的基本URL。
答案 1 :(得分:3)
<?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));
}
?>
答案 2 :(得分:2)
看起来您需要做的就是以不同的方式构建您的路径。
$base = '/uploads/'. $_SESSION['username'] . '/entries/' . '/' . $year . '/';
$destination = $_SERVER['DOCUMENT_ROOT'] . $base;
$url = $_SERVER['HTTP_HOST'] . $base;
答案 3 :(得分:1)
当然有。它被称为“替换路径”。即:
$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)链接是多对一的。也就是说,您可能有几个快捷方式指向同一个文件,但反之亦然。因此,您无法知道哪个快捷方式是正确的。
答案 4 :(得分:1)
最可靠的&#34; (谨慎使用)是使用DIRECTORY_SEPARATOR
:
$uri = str_replace( DIRECTORY_SEPARATOR, "/", ltrim( $path, $root ) )