PHP获取文件的根目录

3
如何获取主文件夹的根目录?例如,我在此位置运行文件:
public_html/admin/user/etc/index.php

我想包含来自的文件

public_html/includes/user/etc/function.php

所以我想做这样的事情:

include(get_first_default_folder().'includes/user/etc/function.php');

替代:

include('../../../includes/user/etc/function.php');

将 /path/to/public_html 添加到 include_path 中,或在您的引导程序中创建一个名为 PUBLIC_HTML 的常量,并将路径设置为该常量的值。 - Gordon
另外,可能的话,$root = 'public_html'; 许多应用程序需要知道根安装目录。 - user1086498
3个回答

4

你可以使用 $_SERVER['DOCUMENT_ROOT'] 来获取文档根目录。

你可以在你的 index.php 文件中包含这一行。

          include("{$_SERVER['DOCUMENT_ROOT']}includes/user/etc/function.php");

@Mor 这在本地主机和生产服务器上会有不同的结果。我的生产服务器返回:/var/www/virtual/{sitename}/www,而本地主机返回:/Users/{username}/Documents/www。这对我来说是不可接受的,因为我要在本地保留与网站文件相同的副本以进行测试和升级。 - ZZ-bb
@ZZ-bb,我刚遇到了这个问题,谢谢你让我知道!我怎么在本地服务器上做同样的事情呢? - homerun
@Mor 请看我的回答。我在每个文件的开头定义了每个文件的子级别,并使用 include,例如:include("{$root}includes/user/etc/function.php"); 在每个服务器上都可以以相同的方式工作 - 这是一点额外手动劳动的好处... - ZZ-bb
我同意@ZZ-bb的评论,例如,如果您的网站在根目录上运行,则可以应用我所提供的示例。但是,如果您的网站在根目录的子目录上运行,则会引发错误。 - Fazle Elahee

2
我通常这样做。 $myDir = dirname(__FILE__);(或者在PHP v5.3+上可以使用__DIR__)是特定文件所在的目录名称。 你知道它在层次结构中的位置,因此可以轻松地使用$myBaseDir = realpath('../../../'.$mydir)'获取基础目录。 Realpath扩展路径到其规范版本,不包括任何符号链接。具有完整路径也可以加快包含或查找文件时的速度。
我这样做的原因是,而不是使用$_SERVER['DOCUMENT_ROOT'],是因为如果我从命令行运行脚本,则该环境变量可能不存在 - 它由Web服务器设置。

1

这可能有点笨拙,但对我来说很有效。在每个文件的开头,我定义一个变量$root。第一级变量是$root = './'(虽然不是必需的),第一个子文件夹是$root = '../',第二个子文件夹是$root = '../../'等等。 $root总是带我到我的网站根目录。

当我需要提供路径时,我只需执行类似于include("{$root}includes/user/etc/function.php");的操作。

这帮助我摆脱了“没有此索引或文件”的警告,因此我会坚持使用它,直到找到更好的方法来完成同样的事情。

或者,您可以为每个文件夹级别定义一个常量,这样您就不必在每个文件的顶部添加$root。(我还没有测试过,所以我不知道以下语法是否正确。)而是像这样做:

  • {ROOT}includes/user/etc/function.php");` // 根级别文件
  • {SUBFOLDER_LEVEL_ONE}includes/user/etc/function.php");` // 第一子文件夹级别文件

在某个地方定义常量后:

  • define("ROOT", "./");
  • define("SUBFOLDER_LEVEL_ONE", "../");
  • 定义("ROOT", "./");
  • 定义("SUBFOLDER_LEVEL_ONE", "../");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接