PHP - 将文件系统路径转换为 URL

2022-08-30 14:37:31

我经常发现我的项目中有需要从文件系统和用户浏览器访问的文件。一个例子是上传照片。我需要访问文件系统上的文件,以便我可以使用GD更改图像或移动它们。但是我的用户还需要能够从 URL 访问文件,例如 .example.com/uploads/myphoto.jpg

由于上传路径通常对应于URL,因此我制作了一个似乎在大多数情况下都有效的函数。以这些路径为例:

File System /var/www/example.com/uploads/myphoto.jpg

网址 http://example.com/uploads/myphoto.jpg

如果我将变量设置为类似的东西,那么我可以从文件系统路径中减去它,然后将其用作图像的URL。/var/www/example.com/

/**
 * Remove a given file system path from the file/path string.
 * If the file/path does not contain the given path - return FALSE.
 * @param   string  $file
 * @param   string  $path
 * @return  mixed
 */
function remove_path($file, $path = UPLOAD_PATH) {
    if(strpos($file, $path) !== FALSE) {
        return substr($file, strlen($path));
    }
}

$file = /var/www/example.com/uploads/myphoto.jpg;

print remove_path($file, /var/www/site.com/);
//prints "uploads/myphoto.jpg"

有谁知道更好的方法来处理这个问题?


答案 1

更准确的方法(包括主机端口)是使用它

function path2url($file, $Protocol='http://') {
    return $Protocol.$_SERVER['HTTP_HOST'].str_replace($_SERVER['DOCUMENT_ROOT'], '', $file);
}

答案 2

假设目录是,地址是/path/to/root/document_root/user/filesite.com/user/file

我显示的第一个函数将获取当前文件相对于万维网地址的名称。

$path = $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];

并将导致:

site.com/user/file

第二个函数去除文档根目录的给定路径。

$path = str_replace($_SERVER['DOCUMENT_ROOT'], '', $path)

如果我通过了,我会得到/path/to/root/document_root/user/file

/user/file

推荐