php获取文件的根目录

php获取文件的根目录,php,include,require,Php,Include,Require,如何将根目录获取到主文件夹?例如,我在以下位置运行文件: 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.ph

如何将根目录获取到主文件夹?例如,我在以下位置运行文件:

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');

我想这有点笨拙,但对我来说很有效。在每个文件的开头,我定义了一个变量
$root
。第一级变量是
$root='./'
(这不是必需的),第一个子文件夹是
$root='../'../'
,第二个子文件夹是
$root='../../'
,依此类推
$root
始终将我带到网站的根文件夹

当我需要提供一个路径时,我只需要做一些类似于
include(“{$root}includes/user/etc/function.php”)

这帮助我摆脱了“没有这样的索引或文件”的警告,所以我会一直坚持下去,直到找到更好的方法来做同样的事情

或者,您可以为每个文件夹级别定义一个常量,这样就不必在每个文件的顶部添加
$root
。(尚未测试,因此我不知道以下语法是否正确。)相反,您可以执行以下操作:

  • {ROOT}包括/user/etc/function.php“;`//ROOT级别的文件
  • {子文件夹_LEVEL_ONE}包括/user/etc/function.php“;`//第一个子文件夹级文件
在某处定义常量后:

  • 定义(“根”、“/”)
  • 定义(“子文件夹\级别\一级”、“./”
您可以从$\u服务器['Document\u root']使用文档根目录

您可以在index.php文件中包含这一行

include("{$_SERVER['DOCUMENT_ROOT']}includes/user/etc/function.php"); include(“{$\u SERVER['DOCUMENT\u ROOT']}includes/user/etc/function.php”);
我通常这样做<代码>$myDir=dirname(文件)
(或者可以在PHPV5.3上使用
\uuuuu DIR\uuuu
)是特定文件所在的目录名。您知道它在层次结构中的位置,因此您可以使用
$myBaseDir=realpath('../../../../'.$mydir)
'轻松获取基。将路径扩展到其规范版本,不包括任何符号链接。拥有完整路径还可以在包含或以其他方式查找文件时实现较小的加速


我之所以这样做,而不是使用
$\u SERVER['DOCUMENT\u ROOT']
,是因为如果我从命令行运行脚本,环境变量可能不存在-它是由Web服务器设置的。

将/path/to/public\u html添加到include\u路径,或者使用bootstrapalso中的路径创建一个public\u html常量,$root='public_html';许多应用程序需要知道根安装目录。@Mor这在本地主机和生产服务器中会产生不同的结果。我的生产服务器响应:
/var/www/virtual/{sitename}/www
,本地主机响应:
/Users/{username}/Documents/www
。这对我来说是不可接受的,因为为了测试和升级的目的,我在本地保存了相同的副本。@ZZ bb我刚刚遇到了这个问题,谢谢你让我知道这一点!如何在本地主机服务器上执行相同的操作?@Mor请查看我的答案。我在文件的开头定义了每个文件的子级别,并使用
include
s,比如:include(“{$root}includes/user/etc/function.php”);在每台服务器上的工作方式都是一样的——只需要很少的额外人工……我同意@ZZ bb的评论,我给出的示例适用于在根目录上运行的网站。但是如果您的站点运行在根目录的子目录上,这将抛出错误。