如何从绝对文件路径获取url路径到文件-将绝对路径转换为url路径- PHP



我将图像路径存储为服务器磁盘上的绝对文件路径:

/var/www/u1234567/data/www/somesampledomain.xyz/mediaimages/48fa6c736b75e1da485656e97b7d76f9.png

我想转换这个绝对路径->到url路径如下:

https://somesampledomain.xyz/mediaimages/48fa6c736b75e1da485656e97b7d76f9.png

我可以用/var/www...来修剪这个不需要的部分。但是有没有更通用的方法,不需要/var/www/u1234567/data/www/的硬编码部分?

我发现在全局配置文件中有如下内容很有用:

define('BASE_DIR', '/var/www/u1234567/data/www/somesampledomain.xyz/');
define('BASE_URL', 'https://somesampledomain.xyz/');

用于在不同的地方翻译url和路径。不过为了简单起见,通常更像是:

define('BASE_DIR', realpath('../htdocs/'));

那么你可以:

$path = '/var/www/u1234567/data/www/somesampledomain.xyz/mediaimages/48fa6c736b75e1da485656e97b7d76f9.png';
$url  = 'https://somesampledomain.xyz/mediaimages/48fa6c736b75e1da485656e97b7d76f9.png';
function path_to_url($path) {
return preg_replace('/^'.preg_quote(BASE_DIR, '/').'/', BASE_URL, $path, 1);
}
function url_to_path($url) {
return preg_replace('/^'.preg_quote(BASE_URL, '/').'/', BASE_DIR, $url, 1);
}
var_dump(
$url,
path_to_url($path),
$path,
url_to_path($url)
);

输出:

string(77) "https://somesampledomain.xyz/mediaimages/48fa6c736b75e1da485656e97b7d76f9.png"
string(77) "https://somesampledomain.xyz/mediaimages/48fa6c736b75e1da485656e97b7d76f9.png"
string(96) "/var/www/u1234567/data/www/somesampledomain.xyz/mediaimages/48fa6c736b75e1da485656e97b7d76f9.png"
string(96) "/var/www/u1234567/data/www/somesampledomain.xyz/mediaimages/48fa6c736b75e1da485656e97b7d76f9.png"

裁判:

  • https://www.php.net/manual/en/function.realpath
  • https://www.php.net/manual/en/function.preg-replace
  • https://www.php.net/manual/en/function.preg-quote

你可以使用这个简单的php脚本

<?php
$link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
echo("$link");
?>

它将显示您的完整网站url与当前文件,如:http://site .com/file.php