是否存在与real_path相反的PHP函数?

时间:2011-06-09 06:49:28

标签: php

在上传脚本中,我有

$destination = $_SERVER['DOCUMENT_ROOT'] . '/uploads/'. $_SESSION['username'] . '/entries/' . '/' . $year . '/';

我将图像路径上传到数据库,因此字符串存储是real_path(即S:\ sites \ www \ mysite \ uploads \ username \ entries \ 2011 \ file.png)

是否有一个将该真实路径转换为“http:// sitename / uploads ...”的函数

虽然不难实现,但我想知道是否有内置的。我查看了文档但找不到任何内容。

5 个答案:

答案 0 :(得分:5)

即使有,也不应该认为它是可靠的,因为URL中的组件不一定映射到文件系统中的路径。最好从路径中删除已知前缀,并将其替换为包含媒体的基本URL。

答案 1 :(得分:3)

我找到this one at 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));
}
?>

答案 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 ) )