php获取当前文件目录的URL

6rqinv9w  于 2023-04-04  发布在  PHP
关注(0)|答案(5)|浏览(168)

对你来说可能是个简单的问题,但我正在为这个问题绞尽脑汁。
我有一个php文件,需要知道它的当前目录url,以便能够链接到相对于自己的东西。
例如,目前我知道要获取当前目录路径而不是url。当我使用此方法时,我会获取路径:

realpath(__DIR__)

结果:

/Applications/MAMP/htdocs/mysite/dir1/dir2/dir3

这是我想要的结果:

http://localhost:8888/dir1/dir2/dir3

请注意,这不是当前页面的位置。页面从“http://localhost:8888/dir1/dir2/dir3/myfile.php“调用文件,而“myfile.php”具有上面的脚本。

**--编辑以详细说明更多细节--**感谢您的回答。但我知道我需要添加更多细节。

ymdaylpp

ymdaylpp1#

使用echo $_SERVER['PHP_SELF'];
例如,如果URL为http://localhost/~andy/test.php
输出结果为:
/~andy/test.php
这足以生成一个相对URL。
如果你想要当前脚本运行的目录-不带文件名-用途:
echo dirname($_SERVER['PHP_SELF']);
在上面的例子中,将给予/~andy(末尾没有test.php)。参见http://php.net/manual/en/function.dirname.php
请注意,根据您的问题,echo getcwd();不是您想要的。这将为您提供脚本运行的文件系统/服务器上的位置(而不是URL)。脚本在服务器文件系统上的目录和URL是完全不同的两件事。
还有一个函数可以解析PHP中内置的URL:http://php.net/manual/en/function.parse-url.php

yxyvkwin

yxyvkwin2#

如果你的URL是这样的:https://localhost.com/this/is/a/url

$_SERVER['DOCUMENT_ROOT']-给出系统路径 [/var/www/html/this/is/a/url]
$_SERVER['PHP_SELF']-给出当前文件的路由(在域名后面)[/this/is/a/url]
$_SERVER['SERVER_NAME']-给出域名 [localhost.com]
$_SERVER['HTTP_REFERER']-给出正确的HTTP(S)协议和域名。*https://localhost.com(https://localhost.com]) *

如果你想得到完整的url,你可以做如下操作:

一个月五个月一个月

然而,我相信在这种情况下,你所需要的只是相对路径..在这种情况下,你应该只需要使用$_SERVER['PHP_SELF'];

gdx19jrr

gdx19jrr3#

我在这里找到了一个解决方案:https://stackoverflow.com/a/1240574/7295693
这是我现在要使用的代码:

function get_current_file_url($Protocol='http://') {
   return $Protocol.$_SERVER['HTTP_HOST'].str_replace($_SERVER['DOCUMENT_ROOT'], '', realpath(__DIR__)); 
}
t1qtbnec

t1qtbnec4#

根据你的问题,我相信这会让你得到你想要的:

$_SERVER['HTTP_HOST'] . substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], "/"));

参考:

  • $_SERVER['HTTP_HOST']-在您的情况下,这将返回:http://localhost:8888
  • $_SERVER['REQUEST_URI']-在您的情况下,这将返回:/dir1/dir2/dir3/myfile.php

使用添加的substr()strrpos()方法,您可以剥离末尾的_myfile.php`以获得所需的结果:

  • http://localhost:8888/dir1/dir2/dir3*
68de4m5k

68de4m5k5#

您可以使用此代码定位内部项目目录

function baseURL(){
    if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
        $url = "https://"; 
    }else{
        $url = "http://"; 
    }
    // Fix 
    if(dirname($_SERVER['PHP_SELF']) == "/" || dirname($_SERVER['PHP_SELF']) == "\\") {
        return $url . $_SERVER['HTTP_HOST'];
    } else {
        return $url . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
    }

}

相关问题