【问题标题】:PHP get website root absolute URL in server?PHP在服务器中获取网站根绝对URL?
【发布时间】:2012-06-07 04:01:52
【问题描述】:

我非常依赖$_SERVER["DOCUMENT_ROOT"] 来获取绝对路径。但是,这不适用于 URL 不指向根目录的站点。

我的网站存储在以下文件夹中:

  • 站点 1
  • 站点2

全部直接在根目录内。有没有办法获取当前站点根目录所在的服务器中的路径?

它应该返回:

   /var/chroot/home/content/02/6945202/html/site1 // If the site is stored in folder 'site1'
   /var/chroot/home/content/02/6945202/html // If the site is stored in the root

【问题讨论】:

  • 你想从域的根目录获取文档的根目录还是什么? Coz,你做的其实是对的!
  • 我想获取托管每个站点的服务器上的绝对路径。
  • 好的,$_SERVER["DOCUMENT_ROOT"] 确实做到了,但你得到了什么?你已经给了你想要的。我想您需要 Apache 的帮助,因为只有 Apache 知道哪个是虚拟主机及其地址。明白了吗?
  • 不,你是说 php 不可能知道站点根目录在哪里?有趣的是,$_SERVER['SCRIPT_NAME'] 在“/site1”中执行时会回显/。表示它认为它是根。

标签: php


【解决方案1】:

您可以简单地将dirname($_SERVER['SCRIPT_NAME']) 附加到$_SERVER['DOCUMENT_ROOT']

更新

该网站似乎是“挂载”在该文件夹上的目录,所以SCRIPT_NAME 显然是/

因此,要完成这项工作,您必须使用__DIR__dirname(__FILE__) 来找出您的脚本在文件系统中的位置。

更新 2

整个网站没有一个 index.php 控制器,所以这也行不通。

以下表达式执行字符串“减法”以找到公共路径。你有一个已知的前缀(文档根目录)、一个未知的(根文件夹)和一个已知的后缀(脚本路径),所以要找到前两个,你取完整的绝对路径(__FILE__)并减去已知的后缀:

substr(__FILE__, 0, -strlen($_SERVER['SCRIPT_NAME']));

如果包含的文件需要此值,则必须先将其存储在常量中,然后再包含相关脚本。 .

【讨论】:

  • 我尝试在 site2 index.php 中运行它,它返回:/。我需要它指向:/var/chroot/home/content/02/6945202/html/site1,这是我网站的根目录。
  • 看起来你的服务器是 chrooted,这可能会影响传递给 PHP 的变量。该路径是您的服务器帐户根目录吗?
  • 我想你忘了提到该网站被称为http://www.example.org/index.php;在这种情况下,您必须使用 __DIR__dirname(__FILE__) 并将其保持为常量,以便包含的脚本也可以使用它。
  • 不,我的服务器帐户根目录是/var/chroot/home/content/02/6945202/html。 mk-ds.com(我的网站之一)指向此文件夹/var/chroot/home/content/02/6945202/html/mkds。所以站点的根目录实际上是/mkds 我需要一种方法来回显任一路径,具体取决于站点的根目录在哪里。
  • @Liso22 对,那么你必须在答案中使用我的第二个建议
【解决方案2】:

对于未来的谷歌员工,这也适用于我

substr(substr(__FILE__, strlen(realpath($_SERVER['DOCUMENT_ROOT']))), 0, - strlen(basename(__FILE__)));

【讨论】:

  • 您的解决方案基于$_SERVER['DOCUMENT_ROOT'],这已被证明是平台相关的:在某些情况下,它使用服务器根目录的路径编译,在其他情况下使用站点根目录的路径,所以不安全。我认为最好的方法是依赖$_SERVER['SCRIPT_NAME']$_SERVER['SCRIPT_FILENAME']
【解决方案3】:

只需使用getcwd() 作为当前脚本所在文件夹的当前绝对服务器路径即可。

您可以在网站顶部定义一个常量,以便网站的其余部分可以依赖该路径。

define('MY_SERVER_PATH', getcwd());

【讨论】:

    【解决方案4】:

    使用以下方法从您的服务器设置中获取绝对根 url

       str_replace($_SERVER['DOCUMENT_ROOT']."/",$_SERVER['PHPRC'],$_SERVER['REAL_DOCUMENT_ROOT'])
    

    或使用getcwd()。它获取应用程序的当前工作目录

    【讨论】:

    • PHPRCREAL_DOCUMENT_ROOT 在我相当标准的 PHP 7 (Fedora 25) 安装中都不存在。
    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2012-08-27
    • 1970-01-01
    相关资源
    最近更新 更多