对您来说可能是一个简单的问题,但我对此不屑一顾。
我有一个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”具有上面的脚本。
-编辑以详细说明- 感谢您的回答。但我知道我需要添加更多细节。
答案 0 :(得分:3)
使用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是2个完全不同的东西。
还有一个函数可以解析PHP内置的URL:http://php.net/manual/en/function.parse-url.php
答案 1 :(得分:1)
我在这里找到了解决方案: 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__));
}
答案 2 :(得分:0)
如果您的网址是这样的: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]
如果您想获取完整的URL,可以执行以下操作:
echo $_SERVER['HTTP_REFERER'] . $_SERVER['PHP_SELF'];
但是,我确实相信在这种情况下,您只需要相对路径即可。在这种情况下,您只需要使用$_SERVER['PHP_SELF'];
答案 3 :(得分:0)
根据您的问题,我相信这会为您带来想要的东西:
$_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