【问题标题】:how to grab the relative path of a file with php如何用php获取文件的相对路径
【发布时间】:2019-06-30 05:55:10
【问题描述】:

我正在尝试捕获文件的相对路径以创建共享链接。 从我在网络服务器上的httpdocs 文件夹中,我的文件在这里:

jack/single/uploads/folder1/image.jpg

var $dir . '/' . $file 给了我这个输出:

uploads/folder1/image.jpg

realpath($dir . '/' . $file 给我这个输出:

/home/vhosts/example.com/subdomains/develop3/httpdocs/jack/single/uploads/folder1/image.jpg

我想要实现的是这个输出:

`http://develop3.example.com/jack/single/uploads/folder1/image.jpg`

我怎样才能做到这一点,以便我可以创建一个分享链接?

【问题讨论】:

  • 如果相应地更改魔术变量$dir 会发生什么?
  • jack/single/uploads/folder1 ;所以只有文件所在的目录
  • 如果$dir包含您发布的内容,附加另一个/和另一个变量将永远不会返回前面不包含jack/single的变量
  • 只需将 /home/vhosts/example.com/subdomains/develop3/httpdocs 替换为 develop3.example.com

标签: php path relative-path


【解决方案1】:

您可以在realpath 的输出中使用preg_replace 将httpdocs 之前的所有内容替换为您网站的网址:

echo preg_replace('#^' . preg_quote($_SERVER['DOCUMENT_ROOT']) . '[\\\\/]#', "{$_SERVER['HTTP_HOST']}/", realpath('test6.php')) . "\n";

【讨论】:

  • 这很好用。我假设,每个网络服务器都使用httpdocs,所以在他的网络服务器上使用这个脚本的任何其他人总是得到文件的正确路径?
  • @JackMaessen 实际上很多人不这样做,所以我编辑了我的答案以使其更健壮。假设您的目标文件位于文档根目录下(服务器上的httpdocs),那么这将起作用(即使在 Windows 服务器上)
【解决方案2】:

您可以使用 $_SERVER['HTTP_HOST'] 来获取您的站点名称:

function get_link($to_file){
    return "https://".$_SERVER['HTTP_HOST']."/jack/single/".$to_file;
}

echo get_link($dir . '/' . $file);

根据您的项目更改函数的 url 部分(您使用 https 还是 http?/jack/single 将始终是上传的父文件夹吗?)

【讨论】:

  • 我同意,这行得通。但是,如果其他人使用此脚本并将其放在不同的文件夹中怎么办?然后jack/single 不再实际。所以我需要一些东西来检查来自网络服务器的相对路径
  • 在你的项目中是php脚本吗?还要检查 $_SERVER['REQUEST_URI'] 的内容,它应该包含您要查找的相对路径
猜你喜欢
  • 2019-07-13
  • 1970-01-01
  • 2013-01-31
  • 2015-09-25
  • 1970-01-01
  • 2011-02-07
  • 2017-04-21
  • 1970-01-01
  • 2013-07-17
相关资源
最近更新 更多