PHP:如何获取相对文件的URL

时间:2014-12-09 23:31:11

标签: php url relative-path

PHP是否有一个本机函数,它返回您使用相对路径声明的文件的完整URL?我需要:"http://www.domain.com/projects/test/img/share.jpg"来自"img/share.jpg"到目前为止,我已经尝试了以下内容:

realpath('img/share.jpg');
// Returns "/home/user/www.domain.com/projects/test/img/share.jpg"

我也尝试过:

dirname(__FILE__)
// Returns "/home/user/www.domain.com/projects/test"

this answer表示以下内容可能会被客户端篡改:

"http://'.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI].'img/share.jpg"

另外,我的路径会有所不同,具体取决于我是否在没有index.php的情况下从/test/index.phptest/进行访问,而且我不想硬编码是否&# 39; s http或https。

有人有解决方案吗?我将这些文件发送给将上传到其服务器的其他人,因此文件夹结构将不匹配"/home/user/www.domain.com/"

2 个答案:

答案 0 :(得分:2)

echo preg_replace(preg_quote($_SERVER['DOCUMENT_ROOT']), 'http://www.example.com/', realpath('img/share.jpg'), 1);

文档:preg_replacepreg_quote

preg_replace的论点:

  • preg_quote($_SERVER['DOCUMENT_ROOT']) - 获取文档根目录(例如/home/user/www.domain.com/)并使其成为与preg_replace一起使用的正则表达式。
  • 'http://www.example.com/' - 用。替换正则表达式匹配的字符串。
  • realpath('img/share.jpg') - 包含文档根目录的文件路径的字符串。
  • 1 - 替换正则表达式匹配的次数。

答案 1 :(得分:1)

怎么样

echo preg_replace("'". preg_quote($_SERVER['DOCUMENT_ROOT']) ."'",'http://www.example.com/', realpath('img/share.jpg'), 1);