【问题标题】:php get URL of current file directoryphp获取当前文件目录的URL
【发布时间】:2018-08-10 15:20:07
【问题描述】:

对你来说可能是一个简单的问题,但我正在为这个问题而烦恼。

我有一个 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”有上面的脚本。

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

【问题讨论】:

  • 使用$_SERVER['DOCUMENT_ROOT'] 比尝试计算相对目录容易得多。
  • 在大多数现代 Web 应用程序中,URL 与文件系统无关……只是需要牢记。
  • @CD001 是的,但在这种情况下,如果没有更多信息,将无法回答。他想要的输出实际上是匹配相对于项目目录的文件路径
  • 您的问题有些含糊不清,因为您的问题提到了“当前目录 url”。 “当前目录”和 URL 可以完全不同 - 脚本的文件系统目录与其 URL 之间不一定有直接关系。

标签: php


【解决方案1】:

使用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

【讨论】:

  • 谢谢,但在我的情况下,它首先返回一个调用“myfile.php”的路径。'/index.php'。在这种情况下父母的位置
  • 看看php.net/manual/en/function.parse-url.php。您的问题有些含糊不清,因为您的问题提到了“当前目录 url”。 “当前目录”和“URL”可以完全不同——脚本的文件系统目录和它的 URL 之间不一定有直接关系。听起来您正在尝试计算 URL 的目录结构,在这种情况下,我给出的解决方案将起作用。
【解决方案2】:

如果你的网址是这样的: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]

如果您想获取完整的网址,可以执行以下操作:

echo $_SERVER['HTTP_REFERER'] . $_SERVER['PHP_SELF'];

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

【讨论】:

    【解决方案3】:

    我在这里找到了解决方案: 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__)); 
    }
    

    【讨论】:

    • 我今天被这个烫伤了!请务必使用文档根目录的真实路径realpath($_SERVER['DOCUMENT_ROOT']),以便正确解析符号链接
    【解决方案4】:

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

    $_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

    【讨论】:

    • 您可以使用dirname($_SERVER['PHP_SELF']); 而不是substr()strpos() 来完成最后一部分。如果文件被重命名,操作字符串可能会导致结果不佳。上面的函数将简单地从它所在的目录中删除脚本名称。
    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 2023-03-12
    • 2013-06-08
    相关资源
    最近更新 更多